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语句,但它不会打印它计算的总组合。
答案 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)