Python中两个列表上的XOR

Python中两个列表上的XOR,python,list,python-2.7,xor,Python,List,Python 2.7,Xor,我是Python的初学者,我必须在两个列表之间进行异或运算(第一个列表的长度为600,另一个为60) 我真的不知道怎么做,如果有人能告诉我怎么做,那将是一种乐趣 我必须这样做才能找到BPSK信号模块,我想知道如何使用两个长度不相同的列表。我看了这篇文章:但是列表的长度是一样的 谢谢你的帮助,我的英语很差 Rom给定序列seq1和seq2,您可以使用 比如说, In [19]: set([1,2,5]).symmetric_difference([1,2,9,4,8,9]) Out[19]: {4

我是Python的初学者,我必须在两个列表之间进行异或运算(第一个列表的长度为600,另一个为60)

我真的不知道怎么做,如果有人能告诉我怎么做,那将是一种乐趣

我必须这样做才能找到BPSK信号模块,我想知道如何使用两个长度不相同的列表。我看了这篇文章:但是列表的长度是一样的

谢谢你的帮助,我的英语很差
Rom

给定序列
seq1
seq2
,您可以使用

比如说,

In [19]: set([1,2,5]).symmetric_difference([1,2,9,4,8,9])
Out[19]: {4, 5, 8, 9}
提示:使用较小的列表生成集合通常更快:

In [29]: %timeit set(range(60)).symmetric_difference(range(600))
10000 loops, best of 3: 25.7 µs per loop

In [30]: %timeit set(range(600)).symmetric_difference(range(60))
10000 loops, best of 3: 41.5 µs per loop
您可能希望使用
symmetric difference
而不是
^
(尽管语法很漂亮)的原因是
symmetric difference
方法可以将列表作为输入<代码>^要求设置两个输入。将两个列表转换为集合的计算量比最低要求的要多一些


这个问题被标记为重复的问题 然而,这个问题正在寻求一种不使用集合的解决方案

公认的解决方案

[a for a in list1+list2 if (a not in list1) or (a not in list2)]
如果允许使用集合,则不建议对两个列表进行异或运算。首先,速度要慢100多倍:

In [93]: list1, list2 = range(600), range(60)

In [94]: %timeit [a for a in list1+list2 if (a not in list1) or (a not in list2)]
100 loops, best of 3: 3.35 ms per loop

设置了
XOR
操作符。假设没有重复项(并且您不关心检查某个元素是否在第二个列表中出现超过1次),则可以在集合上使用
^
运算符:

>>> set([1, 2, 3, 4, 5]) ^ set([1, 3, 4, 5, 6])
set([2, 6])
>>> set(range(80)) ^ set(range(60))
set([60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79])

请注意,问题有一个额外的要求,即集合不能使用。这一问题没有提出这一要求。如果允许集合的话,更简单更快的解决方案是可能的。伟大而彻底的答案!
>>> set([1, 2, 3, 4, 5]) ^ set([1, 3, 4, 5, 6])
set([2, 6])
>>> set(range(80)) ^ set(range(60))
set([60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79])