列表理解版"延伸"

ksg*_*gj1 3 python list-comprehension

以下是否存在1行等效(使用列表理解):

a = []
for i in range(6):
    a.extend(((-i,i,0,2),(-i-1,i,0,6)))
a = tuple(a)
Run Code Online (Sandbox Code Playgroud)

我在想类似的东西

tuple(((-i,i,0,2),(-i-1,i,0,6)) for i in range(6))
Run Code Online (Sandbox Code Playgroud)

但这给了:

(((0, 0, 0, 2), (-1, 0, 0, 6)),
 ((-1, 1, 0, 2), (-2, 1, 0, 6)),
 ((-2, 2, 0, 2), (-3, 2, 0, 6)),
 ((-3, 3, 0, 2), (-4, 3, 0, 6)),
 ((-4, 4, 0, 2), (-5, 4, 0, 6)),
 ((-5, 5, 0, 2), (-6, 5, 0, 6)))
Run Code Online (Sandbox Code Playgroud)

这不是我想要的.

期望的输出

((0, 0, 0, 2),
 (-1, 0, 0, 6),
 (-1, 1, 0, 2),
 (-2, 1, 0, 6),
 (-2, 2, 0, 2),
 (-3, 2, 0, 6),
 (-3, 3, 0, 2),
 (-4, 3, 0, 6),
 (-4, 4, 0, 2),
 (-5, 4, 0, 6),
 (-5, 5, 0, 2),
 (-6, 5, 0, 6))
Run Code Online (Sandbox Code Playgroud)

tim*_*geb 8

您可以使用嵌套列表解析.

>>> [t for i in range(6) for t in ((-i,i,0,2), (-i-1,i,0,6))]
>>> 
[(0, 0, 0, 2),
 (-1, 0, 0, 6),
 (-1, 1, 0, 2),
 (-2, 1, 0, 6),
 (-2, 2, 0, 2),
 (-3, 2, 0, 6),
 (-3, 3, 0, 2),
 (-4, 3, 0, 6),
 (-4, 4, 0, 2),
 (-5, 4, 0, 6),
 (-5, 5, 0, 2),
 (-6, 5, 0, 6)]
Run Code Online (Sandbox Code Playgroud)

它读起来像这样

[what I want (t) | for loops as if writing non-listcomp code]
Run Code Online (Sandbox Code Playgroud)

因此相当于

result = []
for i in range(6):
    for t in ((-i,i,0,2), (-i-1,i,0,6)):
        result.append(t)
Run Code Online (Sandbox Code Playgroud)