我试图将以下内容转换为列表理解,但它给我一个无效的语法错误。我尝试了一些解决方案,例如压缩组合,但我无法让它工作。
我显然缺少一些基本的理解,即我可以使用列表推导式做什么和不能做什么。我的错误是什么?
有效
def myfun(x, y, z):
for c in (x,y,z), (x,z,y), (y,x,z), (y,z,x), (z,x,y), (z,y,x):
print(c)
不起作用
def myfun(x, y, z):
[print(c) for c in (x,y,z), (x,z,y), (y,x,z), (y,z,x), (z,x,y), (z,y,x)]
请您参考如下方法:
这里有两个问题。
首先,您需要将所有元素包装到一个列表中:
[print(c) for c in [(x,y,z), (x,z,y), (y,x,z), (y,z,x), (z,x,y), (z,y,x)]]
其次,print 是 Python 2 中的语句,而不是函数,因此它不能用于列表推导式,因为它们只能包含表达式。
您可以执行 from __future__ import print_function 将其更改为函数,就像在 Python 3 中一样。
但是,这在列表理解中并不合适。它们用于在每个元素上调用某些东西并将结果作为列表返回;你不应该因为它们的副作用而使用它们。
