【问题标题】:List comprehension version of "extend" [duplicate]“扩展”的列表理解版本[重复]
【发布时间】:2019-04-11 10:27:31
【问题描述】:

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

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

我在想类似的事情

tuple(((-i,i,0,2),(-i-1,i,0,6)) for i in range(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)))

这不是我想要的。

期望的输出

((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))

【问题讨论】:

    标签: python list-comprehension


    【解决方案1】:

    您可以使用嵌套列表推导。

    >>> [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)]
    

    这样写

    [what I want (t) | for loops as if writing non-listcomp code]
    

    因此等价于

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

    【讨论】:

      猜你喜欢
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 2017-11-09
      • 2015-07-11
      相关资源
      最近更新 更多