Python 给定一系列数字,构造所有单值、对、三元组等

Python 给定一系列数字,构造所有单值、对、三元组等,python,arrays,python-3.x,list,Python,Arrays,Python 3.x,List,我需要编写一段代码,接收总用户数: `N = 3` (for example) 在此基础上,我需要创建一个列表列表,其中包含所有单元素列表、对、三元组(等等,但在这种情况下,三元组是最大值) 我现在有: from itertools import combinations N = 3 comb_lst = [] for idx in range(1, N+1): comb = combinations([1, 2, 3], idx) for i in comb:

我需要编写一段代码,接收总用户数:

`N = 3` (for example)
在此基础上,我需要创建一个列表列表,其中包含所有单元素列表、对、三元组(等等,但在这种情况下,三元组是最大值)

我现在有:

from itertools import combinations

N = 3
comb_lst = []

for idx in range(1, N+1):
    comb = combinations([1, 2, 3], idx)
    for i in comb:
        comb_lst += [list(i)]

print(comb_lst)

问题是我认为这不会扩展到数千个用户,所以有更快的方法吗

该方法正确有效。一些小的改进:

import itertools

N = 3
numbers = list(range(N+1))

result = []
for i in range(1, N+1):
    result.extend(itertools.combinations(numbers, i))
结果:

result
Out[2]: [(1), (2), (3), (1, 2), (1, 3), (2, 3), (1, 2, 3)]

如果您想重复使用具有相同元素的成对/三元组,请使用
itertools。组合与替换()。计数为2**N。您可以包括或不包括每个元素(一个元素有2个变量)。因此,对于接近1000的N,它不能扩展到数千个用户,但这只是因为可能的组合总数是
(2**N)-1
(假设您确实需要组合,顺序并不重要),所以您可能无法超过几十个。如果可以的话,您可以切换到生成器以至少节省空间,但时间复杂性将是难以解决的
result
Out[2]: [(1), (2), (3), (1, 2), (1, 3), (2, 3), (1, 2, 3)]