python - 检查一个列表中有多少元素包含在第二个列表中,包括重复项

标签 python list comparison

我想根据出现的次数将一些列表(例如 l2,l3)与一个大列表(l1)进行比较,例如:

l1 = ['s1', 's1', 's1', 's2']
l2 = ['s1', 's2']
l3 = ['s1', 's1', 's1']

在我的场景中,l1 更接近 l3,因为(同时考虑出现的次数),l1 和 l3 之间的差异仅是 [ 's2'].

通过将列表元素转换为 set 并将它们相交来比较列表元素的常用方法在这里不起作用,因为重复项已被删除。

我想要这样的输出: compare(l1,l2) = ['s1', 's2'](“l2 的这两个元素在 l1 中找到”) 比较 (l1,l3) = ['s1', 's1', 's1']

是否有运算符/函数或比列表更好的数据结构?

最佳答案

您可以使用 collections.Counter 类的交集运算符 &:

from collections import Counter
def compare(l1, l2):
    return list((Counter(l1) & Counter(l2)).elements())

因此 compare(l1, l2) 返回:

['s1', 's2']

compare(l1, l3) 返回:

['s1', 's1', 's1']

关于python - 检查一个列表中有多少元素包含在第二个列表中,包括重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57330529/

相关文章:

python - 'while'循环出错后如何返回特定点

python - 创建 NumPy 数组的多个幂的矢量化方法是什么?

python - 在 Pyramid 中,使用遍历,如何创建动态 url?

c# - 对嵌套的通用列表进行排序/排序

boolean 值比较的 Python 列表给出了奇怪的结果

Java比较器

python - 检查 : for each element in array check if it exists in another array 的高效实现

java - 使用Java中的方法对单链表进行排序

列表列表的Python切片

python - 比较来自 2 个以上列表的对象