如何使用集合构建器之外的值扩展列表理解?

时间:2014-03-13 20:26:48

标签: python list-comprehension

我基本上是在寻找一个使用python列表理解功能创建列表的单行,但也要添加一些不符合模式的额外值/值。因此,例如,我想获得一个包含以下值的列表[1,2,3,4,5,50]。我尝试过以下方法:

a = [i for i in range(6), 50] # [[0, 1, 2, 3, 4, 5], 50]
b = [i for i in range(6)].append(50) # None
c = [i for i in range(6)].extend([50]) # None

除了实际答案之外,我还非常感谢您解释为什么我的列表都没有返回所需的输出。

4 个答案:

答案 0 :(得分:10)

使用+简单地连接列表:

>>> d = [i for i in range(6)] + [50]
>>> d
[0, 1, 2, 3, 4, 5, 50]

答案 1 :(得分:5)

只是想指出,这不是唯一可以做到这一点的地方,而在其他地方则更有意义:

In [1]: d = [i for i in range(6)] + [50]

In [2]: print d
[0, 1, 2, 3, 4, 5, 50]

In [3]: d = [i for i in range(6) + [50]]

In [4]: print d
[0, 1, 2, 3, 4, 5, 50]

In [5]: d = [i*2 for i in range(6) + [50]]

In [6]: print d
[0, 2, 4, 6, 8, 10, 100]

在这种情况下,拥有一行内容会更有用。

虽然在python 3+中不起作用,因为xrange不是列表;它是一个发电机。更通用的表单使用itertools.chain

In [7]: d = [i*2 for i in xrange(6) + [50]]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-7c5dfed6c9b9> in <module>()
----> 1 d = [i*2 for i in xrange(6) + [50]]

TypeError: unsupported operand type(s) for +: 'xrange' and 'list'

In [8]: from itertools import chain

In [9]: d = [i*2 for i in chain(xrange(6),[50])]

In [10]: print d
[0, 2, 4, 6, 8, 10, 100]

答案 2 :(得分:1)

append()extend()函数会返回None,因为它们会修改列表,因此应该对此进行解释。如果你想要这样做,你需要做:

b = [i for i in range(6)]
b.append(50)

我不知道任何&#34; pythonic&#34;除a之外,在一行中完成此操作的方法。或者如评论中所指出的那样:

d = [i for i in range(6)] + AnotherListWithExtraCharacters

答案 3 :(得分:0)

您可以使用添加运算符:

print [i for i in range(6)] + [50]
>>> [0, 1, 2, 3, 4, 5, 50]