xoring список двоичных строк - PullRequest
0 голосов
/ 12 октября 2019
a=['0011001100',0100011011',
 '0110111001', '1001001010',
 '1010001000', '1001000001',
 '0101001111', '1110010001',
 '0011101111', '0101010100',
 '0010110000', '1011110111',
 '0000011101', '0000011100']
d=['0101001111', '1110010001',
 '0011101111', '0101010100',
 '0010110000', '1011110111',
 '0000011101', '0000011100',
 '1011110000', '0010010111',
 '0100010010', '0001100101',
 '1010010101', '1110101101']
c=a^d

пытается выполнить операцию xor между этими данными и набором данных. любая помощь

Ответы [ 2 ]

2 голосов
/ 12 октября 2019

Предполагая, что вы хотите xor соответствующих элементов из a и d, и оба входа и выхода должны быть в виде строк, вы можете сделать это:

c = [bin(int(A, 2) ^ int(D, 2))[2:] for A, D in zip(a, d)]
#  ['110000011', '1010001010', 
#   '101010110', '1100011110', 
#   '1000111000', '10110110', 
#   '101010010', '1110001101', 
#   '1000011111', '111000011', 
#   '110100010', '1010010010', 
#   '1010001000', '1110110001']

Преобразует оба A(от a) и D (от d) до целых чисел, выполняет побитовое xor, затем преобразует их обратно в двоичную строку, используя bin(), и, наконец, обрезает предыдущий '0b' простымslice.

Если вы хотите, чтобы все они были одинаковой длины (те 10 символов, с которых вы начали), вы можете взять эту результирующую строку и выровнять ее по правому краю, заполнив неиспользуемое пространство начальными нулями:

c = [bin(int(A, 2) ^ int(D, 2))[2:].rjust(10, '0') for A, D in zip(a, d)]
#  ['0110000011', '1010001010', 
#   '0101010110', '1100011110', 
#   '1000111000', '0010110110', 
#   '0101010010', '1110001101', 
#   '1000011111', '0111000011', 
#   '0110100010', '1010010010', 
#   '1010001000', '1110110001']

0 голосов
/ 12 октября 2019

Попробуйте это

def XOR_func(a, d):
    c = []
    for i in len(a):
        a_list = list(a[i])
        d_list = list(d[i])
        c_list = []
        for j in len(a_list):
           if a_list[j] == "0" and d_list[j] == "0":
                 c_list.append("0")
           if a_list[j] == "0" and d_list[j] == "1":
                 c_list.append("1")
           if a_list[j] == "1" and d_list[j] == "0":
                 c_list.append("1")
           if a_list[j] == "1" and d_list[j] == "1":
                 c_list.append("0")
       c.append(''.join(c_list))
    return c
...