gpt4 book ai didi

Python 3 - 计算两个列表中的匹配项(包括重复项)

转载 作者:太空狗 更新时间:2023-10-30 00:41:26 25 4
gpt4 key购买 nike

首先,我是编程和 python 的新手,我在这里看过但找不到解决方案,如果这是一个愚蠢的问题,请原谅我!

我有两个列表,我试图确定第二个列表中的项目在第一个列表中出现了多少次。

我有以下解决方案:

    list1 = ['black','red','yellow']
list2 = ['the','big','black','dog']
list3 = ['the','black','black','dog']
p = set(list1)&set(list2)
print(len(p))

除了第二个列表包含重复项外,它工作正常。

即上面的 list1 和 list2 返回 1,但 list1 和 list3 也返回 1,理想情况下应该返回 2

任何人都可以提出解决方案吗?任何帮助将不胜感激!

谢谢,

亚当

最佳答案

您遇到此问题是因为您使用的是 sets为您的收藏类型。集合有两个特点:它们是无序的(这在这里无关紧要),并且它们的元素是唯一的。因此,当您将列表转换为集合时,您甚至在找到它们的交集之前就丢失了列表中的重复项:

>>> p = ['1', '2', '3', '3', '3', '3', '3']
>>> set(p)
set(['1', '2', '3'])

您可以通过多种方式完成此处的操作,但您首先要查看列表 count 方法。我会做这样的事情:

>>> list1 = ['a', 'b', 'c']
>>> list2 = ['a', 'b', 'c', 'c', 'c']
>>> results = {}
>>> for i in list1:
results[i] = list2.count(i)
>>> results
{'a': 1, 'c': 3, 'b': 1}

此方法创建一个字典(results),并为list1中的每个元素,在results中创建一个键,计算它出现的次数出现在 list2 中,并将其分配给键的值。

编辑:正如 Lattyware 指出的那样,该方法解决的问题与您提出的问题略有不同。一个真正基本的解决方案看起来像这样

>>> words = ['red', 'blue', 'yellow', 'black']
>>> list1 = ['the', 'black', 'dog']
>>> list2 = ['the', 'blue', 'blue', 'dog']
>>> results1 = 0
>>> results2 = 0
>>> for w in words:
results1 += list1.count(w)
results2 += list2.count(w)

>>> results1
1
>>> results2
2

这与我的第一个建议的工作方式类似:它遍历主列表中的每个单词(这里我使用 words),添加它在 list1< 中出现的次数 到计数器 results1list2results2

如果您需要的信息不仅仅是重复项的数量,您需要使用字典,或者更好的是,collections 模块中的专用 Counter 类型.计数器的构建是为了让我在上面的示例中所做的一切变得简单。

>>> from collections import Counter
>>> results3 = Counter()
>>> for w in words:
results3[w] = list2.count(w)

>>> results3
Counter({'blue': 2, 'black': 0, 'yellow': 0, 'red': 0})
>>> sum(results3.values())
2

关于Python 3 - 计算两个列表中的匹配项(包括重复项),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13323851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com