我想转换此列表:
a = [['0001', '0101'], ['1100', '0011']]
为:
a' = [['1110', '1010'],['0011','1100']]
在第二个例子中,每个字符都改变为相反的字符(即'1'变为'0','0'变为'1')。 我试过的代码是:
for i in a:
for j in i:
s=list(j)
for k in s:
position = s.index(k)
if k=='0':
s[position] = '1'
elif k=='1':
s[position] = '0'
''.join(s)
但它无法正常工作。我能做什么? 感谢
答案 0 :(得分:2)
您可以使用翻转这样的位的函数:
from string import maketrans
flip_table = maketrans('01', '10')
def flip(s):
return s.translate(flip_table)
然后只需在列表中的每个项目上调用它,如下所示:
>>> flip('1100')
'0011'
答案 1 :(得分:0)
使用简单的列表理解:
[[k.translate({48:'1', 49:'0'}) for k in i] for i in a]
48
是"0"
的代码,49
是"1"
的代码。
演示:
>>> a = [['0001', '0101'], ['1100', '0011']]
>>> [[k.translate({48:'1', 49:'0'}) for k in i] for i in a]
[['1110', '1010'], ['0011', '1100']]
对于Python 2.x:
from string import translate, maketrans
[[translate(k, maketrans('10', '01')) for k in i] for i in a]
答案 2 :(得分:0)
[["".join([str(int(not int(t))) for t in x]) for x in d] for d in a]
示例:
>>> a = [['0001', '0101'], ['1100', '0011']]
>>> a_ = [["".join([str(int(not int(t))) for t in x]) for x in d] for d in a]
>>> a_
[['1110', '1010'], ['0011', '1100']]
答案 3 :(得分:0)
from ast import literal_eval
import re
a = [['0001', '0101'], ['1100', '0011']]
print literal_eval(re.sub('[01]',lambda m: '0' if m.group()=='1' else '1',str(a)))
据说literal_eval()比eval()
更安全