Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 查找出现的值是多个列表及其频率_Python_Python 3.x_List - Fatal编程技术网

Python 查找出现的值是多个列表及其频率

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-

我有一份清单。每个列表中都有字符串值。 通常可以看到列表中的值通过不同的列表。我想找到出现在不同列表中至少超过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-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))