Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;^:';的操作数类型不受支持;str';和';str'&引用;在Python3.x中使用二进制_Python_String_Integer_Binary Operators - Fatal编程技术网

&引用;^:';的操作数类型不受支持;str';和';str'&引用;在Python3.x中使用二进制

&引用;^:';的操作数类型不受支持;str';和';str'&引用;在Python3.x中使用二进制,python,string,integer,binary-operators,Python,String,Integer,Binary Operators,我目前正在做一个关于二进制运算符的项目。现在我有两个列表,其中包含一系列字符串,8位为1和0。假设我有以下代码(表示创建两个数组时生成的内容): 我想运行一个循环,在其中对每个值执行XOR二进制运算符。到目前为止,我的循环如下: for i in len(arr1): arr3[i] = arr1[i] ^ arr2[i] 运行此代码时,会收到以下错误消息: Unsupported operand type(s) for ^: 'str' and 'str' TypeError: '

我目前正在做一个关于二进制运算符的项目。现在我有两个列表,其中包含一系列字符串,8位为1和0。假设我有以下代码(表示创建两个数组时生成的内容):

我想运行一个循环,在其中对每个值执行XOR二进制运算符。到目前为止,我的循环如下:

for i in len(arr1):
    arr3[i] = arr1[i] ^ arr2[i]
运行此代码时,会收到以下错误消息:

Unsupported operand type(s) for ^: 'str' and 'str'
TypeError: 'str' object cannot be interpreted as an integer
我试过这样做:

arr3[i] = bin(arr1[i]) ^ bin(arr2[i])
并返回以下错误消息:

Unsupported operand type(s) for ^: 'str' and 'str'
TypeError: 'str' object cannot be interpreted as an integer
我该怎么解决这个问题


编辑1:这与评论中标记的内容不同。我不是在看如何做一个普通的XOR二进制函数。我知道怎么做。我正在寻找一种将这些字符串转换为二进制数的方法,以便对它们使用异或运算符。

bin
是整数的字符串表示形式。不能对字符串进行异或运算

只要做一个整数转换,基数为2,转换就可以理解整数,有
0b
或没有它:

for a1,a2 in zip(arr1,arr2):
    print(bin(int(a1,2) ^ int(a2,2)))
结果:

0b11100001
0b1010
0b1110100

您可以取消引用列表

arr1 = ['0b01110101', '0b00001111', '0b01001101']
arr2 = ['0b10010100', '0b00000101', '0b00111001']
arr3 = []
还可以修复循环中的错误,并使用
append
range
进行迭代

for i in range(len(arr1)):       # xrange for Pyhon2
    arr3.append(int(arr1[i], 2) ^ int(arr2[i], 2))
试试这个:

arr1 = ['0b01110101', '0b00001111', '0b01001101']
arr2 = ['0b10010100', '0b00000101', '0b00111001']
arr3 = []

for i, _ in enumerate(arr1):
    xor = int(arr1[i], 2) ^ int(arr2[i], 2)
    arr3.append("0b{0:08b}".format(xor))
输出:

['0b11100001', '0b00001010', '0b01110100']

把他们投给ints<代码>整数('0b00111001',2)==57。所有的按位运算符都适用于整数。你是否阅读了这两个答案,看看它是否有助于回答你的问题:如果你“取消引用”,列表(arr1,arr2…)可能会重复。我实际上无法取消引用列表。从我使用循环生成它们的方式来看,它们会出现在列表中,并在列表中加上引号。按照Jean-François Fabre所说的方式进行转换,并修复循环,将修改答案以满足这一新要求。你能解释一下这是如何工作的吗?例如,为什么第二个显示为只有4位而不是完整的8位?这是因为格式和较小的数字大小。作为另一个答案,<代码>“0B{0:08B}”< /C> >是添加零的格式。考虑拉链列表以避免索引访问:<代码A1,A2在zip(ARR1,ARR2):< /代码>。否则就好了。