将2个列表的所有元素与python2进行比较

2024-04-20 03:01:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个列表:a = ['5', '2', '3', '4'],和b = ['1', '6', '7', '5']。使用Python2,如何比较a中的每个列表元素与{}中的每个元素?(即is a[0] == b[0],isa[0] == b[1],等等)。在

我知道我可以写出大量的if语句,但我希望有一种更优雅的方法来实现这一点。在

在检查了每个列表元素之后,我想知道找到共享值的次数(在上面的示例列表中,是一次,'5')。在

编辑:这不是一个重复,b/c我正在比较两个不同的列表,而可能的重复只处理一个列表。在


Tags: 方法元素编辑示例列表ifis语句
3条回答

如果只关心共享值,而不关心它们的位置或计数,请将它们转换为set并使用^{}

>>> a = ['5','2','3','4']
>>> b = ['1','6','7','5']
>>> set(a).intersection(b)
{'5'}

如果要保留元素在交集中出现的频率,还可以使用&来进行^{}的交集

^{pr2}$

注意:这与@gingerplus的解决方案不同,因为它是对称的,即如果5在列表a中出现一次,在列表b中出现两次,那么共享计数将是1,而不是{}。在

list^{}方法可能有助于:

>>> a = ['5', '2', '3', '4']
>>> b = ['1', '6', '7', '5']
>>> for item in a:
...     print item, b.count(item)
... 
5 1
2 0
3 0
4 0

对于大输入,可能比eugene y's更快,因为它只需要在b上迭代一次,
代替len(a)次:

from collections import Counter
counts = Counter(b)

for i in a:
    print(i, counts[i])

相关问题 更多 >