我必须创建一个列表列表(每个内部列表都有n
个固定元素。现在,对于n=3
我这样做:
my_list = []
for x in range(min_inner max_inner + 1):
for y in range(min_outer, max_outer + 1):
for z in range(fixed_param):
my_list.append([x, y, z])
当我尝试列表理解时,例如:
[[x,y,z] for x in range(1,4), y in range(1,4), z in range (4)]
我收到名称错误
NameError: name 'z' is not defined
是否有列表理解方式?考虑到n
可以是任何数字(但不一定是任意大的)
答案 0 :(得分:3)
您还需要遍历列表推导中的范围对象。
[[x,y,z] for x in range(1,4) for y in range(1,4) for z in range (4)]
另外,作为一种更简洁的方法,您可以使用itertools.product()
来获得相同的结果:
from itertools import product
list(product(range(1,4),range(1,4),range(4)))
请注意,itertools.product()
返回一个迭代器对象,它比返回列表的列表推导更优化(就内存使用而言)。如果您只想迭代结果,则无需将结果转换为列表。否则,列表理解将更快地执行。