如何从任意数量的元素列表中获取列表推导中的平面列表?

Gil*_*tes 3 python

我有这样的事情:

[e for e in ([n for n in xrange(random.randrange(1, 5))] for x in xrange(10))]
Run Code Online (Sandbox Code Playgroud)

它产生:

[[0, 1, 2, 3], [0, 1, 2], [0], [0], [0, 1], [0], [0, 1], [0, 1, 2, 3], [0, 1, 2], [0, 1, 2]]
Run Code Online (Sandbox Code Playgroud)

而且我需要相同但平整的结构.

现在我使用类似的东西:

l = []
[l.extend(e) for e in ([n for n in xrange(random.randrange(1, 5))] for x in xrange(10))]
Run Code Online (Sandbox Code Playgroud)

但是,在理解中实现任意长度列表的"解包"是否有些不足之处呢?

Ash*_*ary 7

使用此列表理解:

In [8]: [y for x in xrange(10) for y in xrange(random.randrange(1, 5))]
Out[8]: [0, 1, 2, 0, 1, 2, 3, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 0, 1, 2, 3, 0, 0, 1, 0]
Run Code Online (Sandbox Code Playgroud)

上面的列表理解等同于此(但LC更快):

In [9]: lis=[]

In [10]: for x in xrange(10):
   ....:     for y in xrange(random.randrange(1, 5)):
   ....:         lis.append(y)
   ....:         
Run Code Online (Sandbox Code Playgroud)

  • +1 - 这里最好的选择是按照自己想要的方式制作,而不是将其压平. (3认同)
  • @gillBates`for x in xrange(random.randrange(1,5))`遍历任意长度列表以返回展平列表. (2认同)