【发布时间】:2015-05-17 13:30:45
【问题描述】:
我是python的新手。我想在一行中创建一个列表:
>>> x = [[-1, y] for y in range(-1, 2), [0, 1], [1, z] for z in range(1, -2, -1), [0, -1]]
得到:
>>>> x = [[-1, -1], [-1, 0], [-1, 1], [0, 1], [1, 1], [1, 0], [1, -1], [0, -1]]
但它给出了错误:名称'z'未定义。所以我不得不在单独的行上使用 for 循环和单对,每次都附加。在此之前我做过:
>>> x = [[-1, y] for y in range(-1, 2),[0, 1]]
>>> x
[[-1, [-1, 0, 1]], [-1, [0, 1]]]
它告诉我 y 被视为 for 循环的迭代器以及 [0, 1]。我在 C 和 python 中错误地关联逗号。我如何实现我打算做的事情(单行)? (我知道我可以直接做,因为它的范围很小。但是如果有更大的呢?)
【问题讨论】:
-
订单是故意随机的吗?我最初以为你打算执行
[ [y,z] for y in range(-1, 2) for z in range(-1, 2)]。请更好地解释自己。 -
列表推导式生成同质列表。您正在尝试创建一个异构列表,其中包含整数列表(例如
[-1, -1])和整数列表列表([[1,1], [1,0], [1, -1]])。