[英]Generate combinations without using itertools
我需要修复/修改这里的代码,以便 output 如下所示:
这是代码:
num_list = [1, 2, 3]
def combination_generator(num_list):
pool = tuple(num_list)
n = len(pool)
if range(num_list) > n:
return
indices = list(range(num_list))
yield tuple(pool[i] for i in indices)
while True:
for i in reversed(range(num_list)):
if indices[i] != i + n - range(num_list):
break
else:
return
indices[i] += 1
for j in range(i+1, range(num_list)):
indices[j] = indices[j-1] + 1
yield tuple(pool[i] for i in indices)
print(combination_generator(num_list))
注意:我不允许使用任何导入。 所以我不能使用itertools。 此外,如果添加到列表中,它还必须具有更高数量的值 function。
有什么帮助吗?
num_list = [1, 2, 3]
def combination_generator(attrs):
attrs = list(attrs)
if len(attrs) <= 1:
yield attrs
yield []
else:
for item in combination_generator(attrs[1:]):
yield [attrs[0]]+item
yield item
print(combination_generator(num_list))
print([i for i in combination_generator(num_list)])
print([set(i) for i in combination_generator(num_list)]) # if you nead a list[set]
output:
<generator object powerset at 0x0000022B7E8046D0>
[[1, 2, 3], [2, 3], [1, 3], [3], [1, 2], [2], [1], []]
[{1, 2, 3}, {2, 3}, {1, 3}, {3}, {1, 2}, {2}, {1}, {}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.