Python 查找出现的值是多个列表及其频率
我有一份清单。每个列表中都有字符串值。 通常可以看到列表中的值通过不同的列表。我想找到出现在不同列表中至少超过k次的值。 例如,在以下情况下,Python 查找出现的值是多个列表及其频率,python,python-3.x,list,Python,Python 3.x,List,我有一份清单。每个列表中都有字符串值。 通常可以看到列表中的值通过不同的列表。我想找到出现在不同列表中至少超过k次的值。 例如,在以下情况下,127-0-0-1-59928可以看到3次,或者3-7-3-final-0可以看到4次,类似地,还有其他重复的值 [['127-0-0-1-59924'], ['127-0-0-1-59922'], ['127-0-0-1-59926'], ['127-0-0-1-59926', '3-8-0', '4-15-0-76', '3-7-3-final-
127-0-0-1-59928
可以看到3次,或者3-7-3-final-0
可以看到4次,类似地,还有其他重复的值
[['127-0-0-1-59924'],
['127-0-0-1-59922'],
['127-0-0-1-59926'],
['127-0-0-1-59926', '3-8-0', '4-15-0-76', '3-7-3-final-0'],
['127-0-0-1-59928'],
['127-0-0-1-59928', '3-8-0', '4-15-0-76', '3-7-3-final-0'],
['127-0-0-1-59928'],
['127-0-0-1-59926'],
['127-0-0-1-34426'],
['127-0-0-1-34426', '3-8-0', '4-15-0-76', '3-7-3-final-0'],
['127-0-0-1-34428'],
['127-0-0-1-34428', '3-8-0', '4-15-0-76', '3-7-3-final-0'],
['127-0-0-1-34428'],
['127-0-0-1-34426']]
是否有一种有效的方法可以计算在多个列表中更频繁出现的值和/或值的频率(例如高于某个阈值“k”)
非常感谢你的帮助 您可以创建一个包含所有列表元素的列表:
lst = [['127-0-0-1-59924'], ...]
import collections
counts = collections.Counter(c for l in lst for c in l)
print(counts.most_common())
# [('3-8-0', 4), ('4-15-0-76', 4), ('3-7-3-final-0', 4), ('127-0-0-1-59926', 3), ('127-0-0-1-59928', 3), ('127-0-0-1-34426', 3), ('127-0-0-1-34428', 3), ('127-0-0-1-59924', 1), ('127-0-0-1-59922', 1)]
请注意,这将是所有列表的累计计数,因此,如果一个元素在同一列表中出现两次,也将计为两次出现。
相反,如果你不想在同一个列表中考虑多次出现,而是只计算元素出现在不同列表中的数目,你可以做同样的事情,但是首先把子列表转换成<代码> SET(结果在本例中是相同的):
这两种方法都不考虑元素在列表中的位置,以防出现问题。这里需要注意的重要一点是,
计数器的输入是一个生成器,因此它不必构造一个扁平列表。如果项目不能在子列表中重复,则可以使用。它比你要求的要多,但仍然。。。
counts = collections.Counter(c for l in lst for c in set(l))