打印在生成器表达式中不起作用
Print not working in generator expression
我希望看到数字 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))
,它会按预期打印所有不同的排列。
发生这种情况的原因是因为您正在将 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)
我希望看到数字 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))
,它会按预期打印所有不同的排列。
发生这种情况的原因是因为您正在将 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)