我基本上是在寻找一个使用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
除了实际答案之外,我还非常感谢您解释为什么我的列表都没有返回所需的输出。
答案 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]