665

我有一个整数和一个列表。我想创建一个以变量开头并以列表结尾的新列表。写作a + list我得到错误。编译器处理a为整数,因此我不能使用追加或扩展。你会怎么做?

4

10 回答 10

1068
>>>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).Negative 值被视为相对于数组的末尾。

于 2013-07-28T18:07:05.063 回答
577
>>> a = 5
>>> li = [1, 2, 3]
>>> [a] + li  # Don't use 'list' as variable name.
[5, 1, 2, 3]
于 2013-07-28T17:55:11.833 回答
127

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

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

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

要使用的正确数据结构deque来自collections模块。双端队列公开了一个类似于列表的接口,但针对来自两个端点的修改进行了优化。他们有一种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
于 2016-04-10T12:44:28.243 回答
52

另一种做同样的方法,

list[0:0] = [a]
于 2013-07-28T18:38:16.480 回答
22

您可以使用解包列表:

a = 5

li = [1,2,3]

li = [a, *li]

=> [5, 1, 2, 3]

于 2019-05-14T04:10:13.377 回答
11

基于使用该timeit模块的一些(最小)基准测试,以下似乎与接受的答案相比具有相似的性能(如果不是更好的话)

new_lst = [a, *lst]

[a] + list这将创建一个新列表而不是 mutate lst

如果您的意图是改变列表,请使用lst.insert(0, a).

于 2019-03-28T06:48:53.043 回答
8
list_1.insert(0,ur_data)

确保 ur_data 是字符串类型,因此如果您已将data= int(5)其转换为ur_data = str(data)

于 2019-05-12T12:12:38.610 回答
5

选择:

>>> from collections import deque

>>> my_list = deque()
>>> my_list.append(1)       # append right
>>> my_list.append(2)       # append right
>>> my_list.append(3)       # append right
>>> my_list.appendleft(100) # append left
>>> my_list

deque([100, 1, 2, 3])

>>> my_list[0]

100

[注意]:

collections.dequelist在循环Relevant-Post中比纯 Python 更快。

于 2019-11-21T11:41:17.350 回答
3

只需将列表添加在一起即可创建新列表。

list1 = ['value1','value2','value3']
list2 = ['value0']
newlist=list2+list1
print(newlist)
于 2018-03-26T14:15:01.057 回答
2

这些都不适合我。我将第一个元素转换为系列(单个元素系列)的一部分,并将第二个元素也转换为系列,并使用了追加功能。

l = ((pd.Series(<first element>)).append(pd.Series(<list of other elements>))).tolist()
于 2018-12-19T08:57:37.210 回答