在 python 中我使用 itertools 组合来获取所有唯一的 5 个组合:from itertools import combinationslst = [\'a\', \'b\', \'c\', \'d\',\'e\', \'f&...
在 python 中我使用 itertools 组合来获取所有唯一的 5 个组合:
from itertools import combinations
lst = ["a", "b", "c", "d","e", "f"]
combinations_of_5 = list(combinations(lst, 5))
然后,我得到了一个列表列表,我已过滤该列表列表,仅包含来自 lst 的项目。现在,我需要统计在列表中找到的最受欢迎的组合。
lst_of_lsts = [
["e", "d", "c", "b", "a", "c", "d", "b"],
["e", "b", "c", "a", "b", "e", "c"],
["a", "b", "a", "d", "b", "a", "a"],
["a", "b", "c", "d", "e", "c", "d"],
["e", "d", "c", "b","a"]
]
我以为这会相当简单,但我一直在努力寻找一种可靠的方法来做到这一点并确保结果准确。我实际的列表列表要大得多(几百万个列表),我想知道在列表列表中发现的 10 个最受欢迎的组合。我的想法是也许使用滑动窗口技术,看看其中是否存在任何组合。
任何帮助表示感谢。
尝试提供的解决方案:
from itertools import combinations
from collections import Counter
lst = ["a", "b", "c", "d","e"]
lst_of_lsts = [
["e", "d", "c", "b", "a", "c", "d", "b"],
["e", "b", "c", "a", "b", "e", "c"],
["a", "b", "a", "d", "b", "a", "a"],
["a", "b", "c", "d", "e", "c", "d"],
["e", "d", "c", "b","a"]
]
combinations_of_5 = set(combinations(lst, 5))
data = map(tuple, lst_of_lsts)
c = Counter(comb for comb in data if comb in combinations_of_5)
print(c.most_common(10))
返回 []
首先将 itertools 生成的组合存储在一个集合中,以便快速进行成员资格测试。
combinations_of_5 = set(combinations(lst, 5))
接下来将您的列表过滤为 collections.Counter
:
data = map(tuple, lst_of_lsts)
c = Counter(comb for comb in data if comb in combinations_of_5)
print(c.most_common(10))
话虽如此,我认为您实际上可能正在寻找排列而不是组合。