【问题标题】:How to count Combinations如何计算组合
【发布时间】:2013-05-28 10:55:51
【问题描述】:

我想知道如何计算列表中的组合。更准确地说,我有一个由 6 个随机选择的数字组成的较小列表组成的列表,我想计算每个组合在较大列表中出现的次数,然后最终显示出现次数最少的组合。到目前为止,我尝试使用 Counter() 但它似乎无法计算列表。 这是我想做的一个例子:

列表 = [[1,2,3,4,5,6],[1,5,16,35,55,22],[1,2,3,4,5,6],[5 ,25,35,45,55,10],[1,5,16,35,55,22],[1,2,3,4,5,6],[9,16,21,22,23 ,6],[9,16,21,22,23,6]]

所以在计算组合后它应该打印组合 [5,25,35,45,55,10] 因为它只在列表中出现过一次

仅供参考,列表将随机生成,存储大约 10 亿个组合,但考虑到数字范围,只有 1.75 亿个可能的组合

仅供参考 2 我对 python 非常陌生

【问题讨论】:

    标签: list python-2.7 combinations counting


    【解决方案1】:

    当您构造 Counter 实例时,您可以将列表转换为元组;后者是可散列的,这是一个对象需要能够作为字典的键的属性。

    >>> from collections import Counter
    >>> l = [[1,2,3,4,5,6],[1,5,16,35,55,22],[1,2,3,4,5,6],[5,25,35,45,55,10],[1,5,16,35,55,22],[1,2,3,4,5,6],[9,16,21,22,23,6],[9,16,21,22,23,6]]
    >>> c = Counter(tuple(e) for e in l)
    >>> c
    Counter({(1, 2, 3, 4, 5, 6): 3, (1, 5, 16, 35, 55, 22): 2, (9, 16, 21, 22, 23, 6): 2, (5, 25, 35, 45, 55, 10): 1})
    >>> list(c.most_common()[-1][0])
    [5, 25, 35, 45, 55, 10]
    

    【讨论】:

    • 感谢您的快速回复顺便说一句,有没有办法让它计算数字顺序很重要的组合,例如 [1,2,3,4,5,6] 应该与 [ 6,2,4,5,1,3] 数字排序的原因
    • 上面的方法已经做到了。 (如果您想忽略顺序,请将 'tuple' 更改为 'frozenset'。)
    猜你喜欢
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多