我有一个整数和一个列表。我想创建一个以变量开头并以列表结尾的新列表。写作a + list
我得到错误。编译器处理a
为整数,因此我不能使用追加或扩展。你会怎么做?
10 回答
>>>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 值被视为相对于数组的末尾。
>>> 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) 操作。
要使用的正确数据结构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
另一种做同样的方法,
list[0:0] = [a]
您可以使用解包列表:
a = 5
li = [1,2,3]
li = [a, *li]
=> [5, 1, 2, 3]
基于使用该timeit
模块的一些(最小)基准测试,以下似乎与接受的答案相比具有相似的性能(如果不是更好的话)
new_lst = [a, *lst]
与[a] + list
这将创建一个新列表而不是 mutate lst
。
如果您的意图是改变列表,请使用lst.insert(0, a)
.
list_1.insert(0,ur_data)
确保 ur_data 是字符串类型,因此如果您已将data= int(5)
其转换为ur_data = str(data)
选择:
>>> 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.deque
list
在循环Relevant-Post中比纯 Python 更快。
只需将列表添加在一起即可创建新列表。
list1 = ['value1','value2','value3']
list2 = ['value0']
newlist=list2+list1
print(newlist)
这些都不适合我。我将第一个元素转换为系列(单个元素系列)的一部分,并将第二个元素也转换为系列,并使用了追加功能。
l = ((pd.Series(<first element>)).append(pd.Series(<list of other elements>))).tolist()