1

我想转换这个列表:

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)

但它不能正常工作。我能做些什么?谢谢

4

4 回答 4

2

您可以使用这样的翻转位的函数:

from string import maketrans

flip_table = maketrans('01', '10')
def flip(s):
    return s.translate(flip_table)

然后只需在列表中的每个项目上调用它,如下所示:

>>> flip('1100')
'0011'
于 2013-11-11T13:55:55.297 回答
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() 更安全

于 2013-11-11T15:08:44.217 回答
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]
于 2013-11-11T14:00:48.463 回答
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']]
于 2013-11-11T14:33:22.103 回答