首页 > 解决方案 > 组合组合时的Python记录频率

问题描述

我已经开始将 python 用于一个宠物项目,因为在 excel 之类的程序中无法组织这些数据。我希望你能给我一些指导,告诉我如何达到我想要的结果。请原谅我缺乏python素养。

我有以下代码,我通过减少列表的数量和这些列表中的元素数量来简化这些代码,以便于说明。

import itertools
from collections import Counter

a = list(itertools.permutations([32,36,41],3))
b = list(itertools.permutations([36,32,41],3))
c = list(itertools.permutations([19,31,7],3))

fulllist = a+b+c

print(Counter(map(tuple, fulllist)))

这给出了以下结果:

Counter({(32, 36, 41): 2, (32, 41, 36): 2, (36, 32, 41): 2, (36, 41, 32): 2, (41, 32, 36): 2, (41, 36, 32): 2, (19, 31, 7): 1, (19, 7, 31): 1, (31, 19, 7): 1, (31, 7, 19): 1, (7, 19, 31): 1, (7, 31, 19): 1})

这已经很好了,但不是我需要的。现在我有了 intertools 生成的每个列表组合的第一个计数,我不再关心所述列表中每个元素的顺序。所以,我想得到的最终结果是:

(32, 36, 41): 12 
(19, 31, 7): 6 

并排序,就像我上面写的一样。我觉得我可能会绕圈子,也许有一种更简单的方法可以得到我正在寻找的结果。实际上,我的列表中有 15 个元素,其中大约有 50 个要处理。

我希望你能帮我解决这个问题。非常感谢您提前。

标签: pythonpython-3.xtuplespermutationfrequency

解决方案


如果您不计算排列(在这种情况下使用@Martin 的答案),并且这只是用于创建示例列表,只需排序以使其清楚顺序无关紧要:

>>>print(Counter(tuple(sorted(x)) for x in fulllist))
Counter({(32, 36, 41): 12, (7, 19, 31): 6})

推荐阅读