微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Python 中列出列表的所有可能组合及其计数

如何解决如何在 Python 中列出列表的所有可能组合及其计数

大家好,这实际上是我在这里的第一个问题,所以如果我遗漏了一些信息,请告诉我。

我有一个包含数字的列表。我想要所有可能的组合以及这些组合在我的列表中出现的频率。组合应遵循与 itertools 组合库相同的规则。

我的第一次尝试是循环,它将组合保存在字典中,但我只完成了 2 个数字的长度。在那之后,我唯一的想法是一次又一次地循环,但我想这将花费很长时间,因为我的列表中将有超过 600 个元素。

我的第一次尝试是这样的:

def clean_dic(dic,sigma): #delete all canidates were frequency is smaller then sigma
    dic = dict((k,v) for k,v in dic.items() if v >= sigma)
    
    return dic

def create_canidate(seq,d_seq): #canidate creation with CdisT
    
  
    
    for element in range(0,len(seq)):
        s_check = set()
        for skip in range (1,len(seq)-element):
            
        
        
            number = tuple([seq[element],seq[element+skip]]) 
            
            #get_freq
            if number in d_seq and number not in s_check:
                d_seq[number] += 1
            elif number not in s_check and seq[element] in d_seq and seq[element+skip] in d_seq:
                d_seq[number] = 1
                
            
            s_check.add((seq[element],seq[element+skip]))
    
    
    
    
    
    return d_seq

sequence = [1,2,3,4,1,1] #example sequence
#parameter
sigma = 2

#build dic
d_seq = dict()
d_seq = dict(Counter(sequence))


d_seq = clean_dic(d_seq,sigma)
d_seq = create_canidate(sequence,d_seq)

我已经知道创建所有组合的最好方法可能是使用 set(combinations(sequence,loop through all length)) 但我不知道如何在不遍历所有内容并且不保存任何内容的情况下获得计数.....

所以问题是:完成任务的最佳方式是什么?它会是什么样子?

非常感谢您的帮助:)

问候,

保罗

编辑: 我想做什么的例子。 对于示例序列 [1,2] 我想要结果: 1:2; 2:2; 3:1; 1,3:1; 1,1:1; 2,2:1; 2,3:1; 2,1:1; 3,1:1; 1,2:1; 1,1:1 ..... 等等。 请注意,必须保留顺序。

解决方法

我猜这是输出和代码。

如果输入序列没有排序,(1,1,2)(1,2,1) 不同,使得组合为奇数。

输出:

1 2
2 2
3 1
1,1 1
1,2 4
1,3 2
2,2 1
2,3 2
1,2 2
1,3 1
1,3 4
2,2 1
1,3 2
from collections import Counter
from itertools import combinations

seq = [1,3,2]
seq.sort()  # so that the combination tuples are non-decreasing
counter = Counter()

for r in range(1,len(seq)):
    counter.update(combinations(seq,r))  # let counter count the occurrences

# sort the result by combination length,combination tuple,and the count
results = sorted(counter.items(),key=lambda s: (len(s[0]),s[0],s[1]))

for components,count in results:
    print(','.join(str(s) for s in components),count)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?