更改字符串中的二进制字符

时间:2013-11-11 13:48:22

标签: python

我想转换此列表:

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 个答案:

答案 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()

更安全