问题打印组合

时间:2012-04-18 02:54:47

标签: python combinations

itertools函数没有错误,但一旦完成它也不会打印任何内容。 我的代码是:

def comb(iterable, r):
    pool = tuple(iterable)
    n = len(pool)
    for indices in permutations(range(n), r):
        if sorted(indices) == list(indices):
            print (indices)
            yield tuple(pool[i] for i in indices)

我包含了print语句,但它不会打印它计算的总组合。

2 个答案:

答案 0 :(得分:2)

您需要了解生成器的工作原理。当你调用comb()时,它会返回一个生成器对象。然后,您需要对生成器对象执行某些操作以获取从其返回的对象。

from itertools import permutations

lst = range(4)
result = list(comb(lst, 2))  # output of print statement is now shown

print(result) # prints: [(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]

comb()返回一个生成器对象。然后,list()迭代它并收集列表中的值。在迭代时,您的print语句将被触发。

答案 1 :(得分:1)

它会返回一个generator对象。如果您遍历它,您将看到打印。例如:

for x in comb(range(3),2):
    print "Printing here:", x

给你:

(0, 1) # due to print statement inside your function
Printing here: (0, 1)
(0, 2) # due to print statement inside your function
Printing here: (0, 2)
(1, 2) # due to print statement inside your function
Printing here: (1, 2)

因此,如果您只想逐行打印组合,请删除函数内的print语句,然后将其转换为列表或迭代它。您可以逐行打印:

print "\n".join(map(str,comb(range(4),3)))

给你

(0, 1, 2)
(0, 1, 3)
(0, 2, 3)
(1, 2, 3)