我是Python的初学者,我必须在两个列表之间进行异或(第一个长度为600,另外60个)
我真的不知道该怎么做,如果有人能解释我怎么做,那将是一种乐趣.
我必须这样做才能找到BPSK信号模块,我想知道如何使用两个长度不同的列表.我看到这篇文章:比较两个列表,只打印差异?(XORing两个列表)但列表的长度是相同的
谢谢你的帮助,并为我糟糕的英语Rom sry
unu*_*tbu 19
鉴于序列seq1和seq2,可以计算出对称差与
set(seq1).symmetric_difference(seq2)
Run Code Online (Sandbox Code Playgroud)
例如,
In [19]: set([1,2,5]).symmetric_difference([1,2,9,4,8,9])
Out[19]: {4, 5, 8, 9}
Run Code Online (Sandbox Code Playgroud)
提示:使用较小的列表生成集合通常更快:
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
Run Code Online (Sandbox Code Playgroud)
您可能想要使用symmetric difference而不是^(尽管其语法之美)是因为该symmetric difference方法可以将列表作为输入.^要求两个输入都是集合.将两个列表转换为集合的计算量比最低要求的计算量多一些.
这个问题已被标记为此问题的副本. 然而,该问题是在不使用集合的情况下寻求解决此问题的方法.
接受的解决方案,
[a for a in list1+list2 if (a not in list1) or (a not in list2)]
Run Code Online (Sandbox Code Playgroud)
如果允许集合,则不建议对两个列表进行异或.首先,它慢了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
Run Code Online (Sandbox Code Playgroud)
设备上有XOR操作员.假设您没有重复项(并且您不关心检查元素在第二个列表中是否出现超过1次),您可以^在set上使用运算符:
>>> 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])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25413 次 |
| 最近记录: |