list.append()附加到列表的末尾。这解释了list.prepend()不存在的原因,因为考虑到大型列表的性能。对于一个短列表,我如何预先一个值?
当前回答
在我看来,在Python中,将一个元素或列表前置到另一个列表的最优雅和惯用的方法是使用展开操作符*(也称为解包操作符),
# Initial list
l = [4, 5, 6]
# Modification
l = [1, 2, 3, *l]
其中修改后的结果列表为[1,2,3,4,5,6]
我还喜欢用运算符+简单地将两个列表组合在一起,如下所示,
# Prepends [1, 2, 3] to l
l = [1, 2, 3] + l
# Prepends element 42 to l
l = [42] + l
我不喜欢另一种常见的方法,l.insert(0, value),因为它需要一个神奇的数字。此外,insert()只允许在单个元素前加上前缀,但是上面的方法在单个元素或多个元素前加上前缀时具有相同的语法。
其他回答
我们来看4种方法
使用insert ()
>>>
>>> l = list(range(5))
>>> l
[0, 1, 2, 3, 4]
>>> l.insert(0, 5)
>>> l
[5, 0, 1, 2, 3, 4]
>>>
使用[]和+
>>>
>>> l = list(range(5))
>>> l
[0, 1, 2, 3, 4]
>>> l = [5] + l
>>> l
[5, 0, 1, 2, 3, 4]
>>>
使用切片
>>>
>>> l = list(range(5))
>>> l
[0, 1, 2, 3, 4]
>>> l[:0] = [5]
>>> l
[5, 0, 1, 2, 3, 4]
>>>
使用collections.deque.appendleft ()
>>>
>>> from collections import deque
>>>
>>> l = list(range(5))
>>> l
[0, 1, 2, 3, 4]
>>> l = deque(l)
>>> l.appendleft(5)
>>> l = list(l)
>>> l
[5, 0, 1, 2, 3, 4]
>>>
我会在python >= 3.0中做一些非常快的事情
list=[0,*list]
这可能不是最有效的方法,但在我看来这是最python化的方法。
如果有人像我一样发现了这个问题,下面是我对所提方法的性能测试:
Python 2.7.8
In [1]: %timeit ([1]*1000000).insert(0, 0)
100 loops, best of 3: 4.62 ms per loop
In [2]: %timeit ([1]*1000000)[0:0] = [0]
100 loops, best of 3: 4.55 ms per loop
In [3]: %timeit [0] + [1]*1000000
100 loops, best of 3: 8.04 ms per loop
正如你所看到的,插入和切片赋值的速度几乎是显式添加的两倍,并且结果非常接近。正如Raymond Hettinger所指出的那样,插入是更常见的选项,我个人更喜欢这种方式来添加列表。
这将创建一个带x的新列表,而不是修改现有的列表:
new_list = [x] + old_list
在我看来,在Python中,将一个元素或列表前置到另一个列表的最优雅和惯用的方法是使用展开操作符*(也称为解包操作符),
# Initial list
l = [4, 5, 6]
# Modification
l = [1, 2, 3, *l]
其中修改后的结果列表为[1,2,3,4,5,6]
我还喜欢用运算符+简单地将两个列表组合在一起,如下所示,
# Prepends [1, 2, 3] to l
l = [1, 2, 3] + l
# Prepends element 42 to l
l = [42] + l
我不喜欢另一种常见的方法,l.insert(0, value),因为它需要一个神奇的数字。此外,insert()只允许在单个元素前加上前缀,但是上面的方法在单个元素或多个元素前加上前缀时具有相同的语法。
推荐文章
- 如何从psycopg2游标获得列名列表?
- Python中dict对象的联合
- 如何有效地比较两个无序列表(不是集合)?
- 如何在交互式Python中查看整个命令历史?
- 如何显示有两个小数点后的浮点数?
- 如何用OpenCV2.0和Python2.6调整图像大小
- 在每个列表元素上调用int()函数?
- 将Set<T>转换为List<T>的最简洁的方法
- 当使用代码存储库时,如何引用资源的相对路径
- 如何在Flask-SQLAlchemy中按id删除记录
- 在Python中插入列表的第一个位置
- 在javascript中从平面数组构建树数组
- Python Pandas只合并某些列
- 如何在一行中连接两个集而不使用“|”
- 从字符串中移除前缀