我希望看到数字1-9的组合列表,但不会打印任何内容。我错过了什么?
import itertools
def PrintIt(num):
print(num)
return True
nums = itertools.permutations(range(1, 10))
x = (num for num in nums if PrintIt(num)) # Prints nothing
如果我print(list(x))
,它会按预期打印所有不同的排列。
答案 0 :(得分:2)
发生这种情况的原因是因为您要将x
分配给生成器表达式。除非需要,否则生成器表达式不进行任何计算。要强制计算,更简单的方法是强制它成为一个列表。在那种情况下,你迫使Python制作一个列表,所以python必须执行所有的计算,包括测试你的打印位置。所以你可以这样打印:
x = [num for num in nums if PrintIt(num)]
或
x = (num for num in nums if PrintIt(num))
list(x)
顺便说一句,你不需要拥有打印功能,你可能刚刚完成了:
x = [num for num in nums if print(num)]
但是使用if
不测试某些条件但仅仅是因为你在这里做的副作用是最好的辩论。这就是我写你的程序的方式:
import itertools
nums = itertools.permutations(range(1, 10))
for num in nums:
print(num)