ещё приёмчик
>>> 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]
>>>