Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 1, 2011 13:53:57

Rumato
От:
Зарегистрирован: 2010-10-03
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

замена элементов массива на другие

я просто про text.translate(string.maketrans(“abc”, “123”)) ничего не нашёл,) а c php намного лучше знаком))



Офлайн

#2 Фев. 1, 2011 14:03:48

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

замена элементов массива на другие

Не за что. Кстати, вы поняли, что вопросы нужно задавать более адекватно?
Вот это:

есть массив в неё есть единицы и нули нужно поменять нули на единицы а единицы на нули
Очень слабо кореллирует с тем, что вам действительно было нужно.



Офлайн

#3 Фев. 1, 2011 20:28:17

Rumato
От:
Зарегистрирован: 2010-10-03
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

замена элементов массива на другие

почему? всё что было написанно легко переделывается под масссив с нулями и единицами, мой пхпшный пример - это просто как пример замены одного на другое, тем более мне нужно много чего менять и всё предложенное пригодится



Офлайн

#4 Фев. 1, 2011 20:42:28

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

замена элементов массива на другие

Вопрос-то у вас не про пхп был.
Я бы например, понял бы вашу фразу ‘есть массив в неё есть единицы и нули’ так:
Судя по вашему второмупосту это 'array([,])'.
А судя по php-шному коду и ответу ‘то что нужно’ на мой пост это вообще строка.



Офлайн

#5 Фев. 2, 2011 04:14:01

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

замена элементов массива на другие

ещё приёмчик

>>> test = ['0','0','1','1']
>>> list(''.join(test).replace('0', '#').replace('1', '0').replace('#', '1'))
['1', '1', '0', '0']
>>>
этот вариант быстрее, чем со string
>>> def f2():
... test = ['0','0','1','1']
... n = ''.join(test).translate(string.maketrans('01', '10'))
... return n
...
>>> f2()
__main__:3: DeprecationWarning: string.maketrans is deprecated, use bytes.maketrans instead
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in f2
File "/usr/lib/python3.1/string.py", line 60, in maketrans
raise TypeError("maketrans arguments must be bytes objects")
TypeError: maketrans arguments must be bytes objects
>>> def f2():
... test = ['0','0','1','1']
... n = ''.join(test).translate(string.maketrans(b'01', b'10'))
... return n
...
>>> f2()
'1100'
по timeit 3 на 1000000 раз string я вообще не дождался, тогда как replace'ы заняли ~5 секунд
>>> def f():
... test = ['0','0','1','1']
... n = list(''.join(test).replace('0', '#').replace('1', '0').replace('#', '1'))
... return n
...
>>> f()
['1', '1', '0', '0']
>>> import string
>>> def f2():
... test = ['0','0','1','1']
... n = ''.join(test).translate(string.maketrans('01', '10'))
... return n
...
>>> f2()
__main__:3: DeprecationWarning: string.maketrans is deprecated, use bytes.maketrans instead
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in f2
File "/usr/lib/python3.1/string.py", line 60, in maketrans
raise TypeError("maketrans arguments must be bytes objects")
TypeError: maketrans arguments must be bytes objects
>>> def f2():
... test = ['0','0','1','1']
... n = ''.join(test).translate(string.maketrans(b'01', b'10'))
... return n
...
>>> f2()
'1100'
>>> import timeit
>>> timeit.Timer(lambda: f()).repeat(3, 1000000)
[4.891308069229126, 4.862432956695557, 4.872588157653809]
>>> timeit.Timer(lambda: f2()).repeat(3, 1000000)
^CTraceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.1/timeit.py", line 220, in repeat
t = self.timeit(number)
File "/usr/lib/python3.1/timeit.py", line 193, in timeit
timing = self.inner(it, self.timer)
File "/usr/lib/python3.1/timeit.py", line 99, in inner
_func()
File "<stdin>", line 1, in <lambda>
File "<stdin>", line 3, in f2
File "/usr/lib/python3.1/string.py", line 61, in maketrans
L = bytearray(range(256))
KeyboardInterrupt
>>> timeit.Timer(lambda: f2()).repeat(3, 100)
[0.004187107086181641, 0.004000186920166016, 0.00868082046508789]
>>> timeit.Timer(lambda: f2()).repeat(3, 1000)
[0.052967071533203125, 0.041378021240234375, 0.042649030685424805]
>>> timeit.Timer(lambda: f()).repeat(3, 1000)
[0.00487518310546875, 0.004996061325073242, 0.012998104095458984]
>>>



Отредактировано (Фев. 2, 2011 04:26:58)

Офлайн

#6 Фев. 2, 2011 06:16:12

asv13
От:
Зарегистрирован: 2007-01-22
Сообщения: 130
Репутация: +  0  -
Профиль   Отправить e-mail  

замена элементов массива на другие

Rumato
набор индексированных однотипных данных, в моём случае это d = array([,])
Если бы у вас был изначально именно массив, а не строки как потом оказалось -

>>> import numpy as np
>>> a = np.array([[0, 0],[1, 1]])
>>> a
array([[0, 0],
[1, 1]])
>>> np.where(a==1, 0, 1)
array([[1, 1],
[0, 0]])
Зачем массиву replace я так и не понял )). Может и не стоит повторять за php ?



Офлайн

#7 Фев. 2, 2011 09:55:41

Rumato
От:
Зарегистрирован: 2010-10-03
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

замена элементов массива на другие

я просто только начал на питоне программировать, многое пока ещё непривычно, и мне нужно не только заменять нули на единицы или наоборот, просто строки хоть и не входили в тему топика, но всёравно полезны мне, а за замечания и примеры кода всем большое спасибо, просто в учебниках ничего не было об этом и как правильно производить замены я просто не знал, теперь благодаря Вашей помощи разобрался, ещё раз Всем спасибо за помощь



Отредактировано (Фев. 2, 2011 09:59:20)

Офлайн

#8 Фев. 2, 2011 10:26:40

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

замена элементов массива на другие

соблюдайтеправилапунктуации



Офлайн

#9 Фев. 2, 2011 10:49:32

Isem
От:
Зарегистрирован: 2010-08-27
Сообщения: 447
Репутация: +  7  -
Профиль   Отправить e-mail  

замена элементов массива на другие

Да и вообще следует почитать правила орфографии:
http://libelli.narod.ru/humour/trigg_r.html



Офлайн

#10 Фев. 2, 2011 12:29:02

Rumato
От:
Зарегистрирован: 2010-10-03
Сообщения: 93
Репутация: +  0  -
Профиль   Отправить e-mail  

замена элементов массива на другие

спс, почитаю



Отредактировано (Фев. 2, 2011 12:34:02)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version