在Python中将整数附加到列表的开头

Append integer to beginning of list in Python

我有一个整数和一个列表。我想创建一个新的列表,其中以变量开头,以列表结尾。写a + list时,我会出错。编译器将a作为整数处理,因此我不能使用append或extend。你会怎么做?


1
2
3
4
5
>>>var=7
>>>array = [1,2,3,4,5,6]
>>>array.insert(0,var)
>>>array
[7, 1, 2, 3, 4, 5, 6]

它是如何工作的:

array.insert(index, value)

在给定位置插入项目。第一个参数是要插入的元素的索引,因此array.insert(0, x)插入到列表的前面,array.insert(len(array), x)等价于array.append(x)。负值被视为相对于数组的结尾。


1
2
3
4
>>> a = 5
>>> li = [1, 2, 3]
>>> [a] + li  # Don't use 'list' as variable name.
[5, 1, 2, 3]


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

列表没有针对前面的修改进行优化,somelist.insert(0, something)是O(N)操作。

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

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

演示:

1
2
3
4
5
6
7
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


另一种方法是,

1
list[0:0] = [a]


您可以使用解包列表:

a = 5

li = [1,2,3]

li = [a, *li]

=> [5, 1, 2, 3]


基于使用timeit模块的一些(最小)基准,下面的性能似乎与公认的答案类似,但并不比公认的答案更好。

1
new_lst = [a, *lst]

[a] + list一样,这将创建一个新的列表,而不会使lst发生变异。

如果你想改变列表,那么就使用lst.insert(0, a)


只需将列表添加到一起就可以创建新列表。

1
2
3
4
list1 = ['value1','value2','value3']
list2 = ['value0']
newlist=list2+list1
print(newlist)


1
list_1.insert(0,ur_data)

确保您的数据是字符串类型所以如果你有data= int(5)把它转换成ur_data = str(data)


这些都不适合我。我将第一个元素转换为一个系列(单个元素系列)的一部分,并将第二个元素也转换为一个系列,然后使用append函数。

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