我如何预先一个整数到一个列表的开始?

[1, 2, 3]  ⟶  [42, 1, 2, 3]

当前回答

请注意,如果您试图经常执行该操作,特别是在循环中,则列表是错误的数据结构。

列表在前面没有优化修改,有些列表。insert(0, something)是一个O(n)操作。

somelist.pop(0)和del somelist[0]也是O(n)操作。

要使用的正确数据结构是来自collections模块的deque。Deques公开了一个类似于列表的接口,但是针对来自两个端点的修改进行了优化。他们有一个appendleft方法在前面插入。

演示:

In [1]: lst = [0]*1000
In [2]: timeit -n1000 lst.insert(0, 1)
1000 loops, best of 3: 794 ns per loop
In [3]: from collections import deque
In [4]: deq = deque([0]*1000)
In [5]: timeit -n1000 deq.appendleft(1)
1000 loops, best of 3: 73 ns per loop

其他回答

另一种方法是,

list[0:0] = [a]

请注意,如果您试图经常执行该操作,特别是在循环中,则列表是错误的数据结构。

列表在前面没有优化修改,有些列表。insert(0, something)是一个O(n)操作。

somelist.pop(0)和del somelist[0]也是O(n)操作。

要使用的正确数据结构是来自collections模块的deque。Deques公开了一个类似于列表的接口,但是针对来自两个端点的修改进行了优化。他们有一个appendleft方法在前面插入。

演示:

In [1]: lst = [0]*1000
In [2]: timeit -n1000 lst.insert(0, 1)
1000 loops, best of 3: 794 ns per loop
In [3]: from collections import deque
In [4]: deq = deque([0]*1000)
In [5]: timeit -n1000 deq.appendleft(1)
1000 loops, best of 3: 73 ns per loop

基于使用timeit模块的一些(最小)基准测试,下面的性能似乎与公认的答案相似(如果不是更好的话)

new_lst = [a, *lst]

与[a] + list一样,这将创建一个新的列表,而不会改变lst。

如果您的意图是改变列表,那么使用lst。插入(0)。

你可以使用Unpack列表:

a = 5 li = [1,2,3] li = [a, *li] => [5, 1, 2, 3]

这些对我都没用。我将第一个元素转换为一个系列(单个元素系列)的一部分,并将第二个元素转换为一个系列,并使用append函数。

l = ((pd.Series(<first element>)).append(pd.Series(<list of other elements>))).tolist()