【问题标题】:How to compare two lists in Python and count ALL matches? [duplicate]如何比较 Python 中的两个列表并计算所有匹配项? [复制]
【发布时间】:2020-05-27 14:03:12
【问题描述】:

我有两个字符串列表。我想将列表 1 中的所有项目与列表 2 进行比较,然后计算匹配项。这是我尝试过的:

count = 0

global_fruit = ['apples', 'bananas', 'pears', 'oranges', 'peaches', 'apricots', 'mangoes']
local_fruit = ['bananas', 'apricots', 'oranges']

if any(f in global_fruit for f in local_fruit):
count += 1

print(count)

这将返回计数 1,因为脚本在第二个列表中找到第一个匹配项后立即退出。我希望它返回 3 的计数,因为列表之间有 3 个匹配项。

有没有办法做到这一点?顺序并不重要。

【问题讨论】:

标签: python python-3.x list


【解决方案1】:

您可以使用sum 代替any 并立即获得结果:

global_fruit = ['apples', 'bananas', 'pears', 'oranges', 'peaches', 'apricots', 'mangoes']
local_fruit = ['bananas', 'apricots', 'oranges']

count = sum(f in global_fruit for f in local_fruit)

print(count)

此外,您可以将列表转换为集合并找到交叉点的数量:

global_fruit = ['apples', 'bananas', 'pears', 'oranges', 'peaches', 'apricots', 'mangoes']
global_fruit_set = set(global_fruit)
local_fruit = ['bananas', 'apricots', 'oranges']
local_fruit_set = set(local_fruit)

count = len(global_fruit_set.intersection(local_fruit_set))
print(count)

【讨论】:

  • 您的两个答案都有效,但第一个非常适合我的需要。感谢您以及 komatiraju032 的回答。我的帐户很新,所以你不会看到赞成票,但他们在那里。
【解决方案2】:
global_fruit = ['apples', 'bananas', 'pears', 'oranges', 'peaches', 'apricots', 'mangoes']
local_fruit = ['bananas', 'apricots', 'oranges']
count=0 
for a in global_fruit:
    if(a in local_fruit):
        count+=1
print(count)

【讨论】:

  • 欢迎来到 Stack Overflow。没有任何解释的代码转储很少有帮助。 Stack Overflow 是关于学习的,而不是提供 sn-ps 来盲目复制和粘贴。请edit您的问题并解释它如何比OP提供的更好。见How to Answer
【解决方案3】:

试试这个:

global_fruit = ['apples', 'bananas', 'pears', 'oranges', 'peaches', 'apricots', 'mangoes']
local_fruit = ['bananas', 'apricots', 'oranges']

print(len(local_fruit) - len(set(local_fruit) - set(global_fruit)))

【讨论】:

    猜你喜欢
    • 2010-11-26
    • 2017-10-28
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2021-09-19
    相关资源
    最近更新 更多