我是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]]
但它给出了错误:name' 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中错误地编写了逗号。我如何实现我打算做的事情(单行)? (我知道我可以直接做到这一点,因为它的范围很小。但如果有更大的那个怎么办?)
答案 0 :(得分:2)
您应该连接列表,并将嵌套列表放到括号
>>> [[-1, y] for y in range(-1, 2)] + [[0, 1], [[1, z] for z in range(1, -2, -1)], [0, -1]]
[[-1, -1], [-1, 0], [-1, 1], [0, 1], [[1, 1], [1, 0], [1, -1]], [0, -1]]
答案 1 :(得分:0)
结帐itertools。您不确定自己是否想要product
,permutations
或combinations
,但我认为其中一个将是您需要的。
编辑:仔细观察后,你做了一些更简单的事情,你错过了几个括号。尝试:
x = [[[-1, y] for y in range(-1, 2)], [0, 1], [[1, z] for z in range(1, -2, -1)], [0, -1]]
列表推导在它们自己的括号中,它与列表文字的语法相似但不相同。
编辑2:
在此之前我做了:
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中错误地编写了逗号。我如何实现我的目标 打算做(单行)? (我知道我可以直接做到 因为它的范围很小。但如果有更大的那个怎么办?)
是的,你误解了你的逗号在那里做了什么。它将你的for循环的第二部分变成(range(-1,2), [0, 1])
的元组(2项)。你需要做的是在range(-1,2)
之后关闭你的列表理解,然后将整个事物用方括号括起来使它成为文字列表声明:
x = [[[-1, y] for y in range(-1, 2)],[0, 1]]
正如@YuriyKovalev所提到的,将列表连接起来可能会更清楚:
x = [[-1, y] for y in range(-1, 2)] + [0, 1]