我是Python初学者,我必须在两个列表之间进行异或(第一个长度为600,另一个长度为60)
我真的不知道该怎么做,如果有人能解释我怎么做,那将是我的荣幸。
我必须这样做才能找到 BPSK 信号模块,我想知道如何使用两个长度不同的列表来做到这一点。我看到这篇文章:Comparing two lists and only printing the differences? (XORing two lists)但列表的长度是相同的
感谢您的帮助,并对我的英语不好表示抱歉 罗马
最佳答案
给定序列seq1
和seq2
,您可以计算 symmetric difference与
set(seq1).symmetric_difference(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
您可能想要使用对称差异
而不是^
(尽管其语法很漂亮)的原因是因为对称差异
方法可以将列表作为输入。 ^
要求设置两个输入。将两个列表转换为集合的计算量比最低要求要多一些。
此问题已被标记为 this question 的重复问题 然而,这个问题正在寻求不使用集合的解决方案。
已接受的解决方案,
[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
关于python - Python 中两个列表的异或,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22736641/