繁体   English   中英

在不使用 itertools 的情况下生成组合

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM