Nul*_*ify 662
>>>var=7
>>>array = [1,2,3,4,5,6]
>>>array.insert(0,var)
>>>array
[7, 1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
array.insert(index, value)
在给定位置插入项目.第一个参数是要插入的元素的索引,因此array.insert(0, x)
插入列表的前面,并且array.insert(len(array), x)
等效于array.append(x)
.Negative值被视为相对于数组的末尾.
Roh*_*ain 519
>>> a = 5
>>> li = [1, 2, 3]
>>> [a] + li # Don't use 'list' as variable name.
[5, 1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
tim*_*geb 93
请注意,如果您经常尝试执行该操作,尤其是在循环中,则列表是错误的数据结构.
列表未针对前端的修改进行优化,并且somelist.insert(0, something)
是O(n)操作.
somelist.pop(0)
并且del somelist[0]
也是O(n)操作.
要使用的正确数据结构deque
来自collections
模块.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
Run Code Online (Sandbox Code Playgroud)
v2b*_*v2b 38
另一种做同样的方式,
list[0:0] = [a]
Run Code Online (Sandbox Code Playgroud)
sah*_*dre 11
list_1.insert(0,ur_data)
Run Code Online (Sandbox Code Playgroud)
确保 ur_data 是字符串类型,因此如果您已将data= int(5)
其转换为ur_data = str(data)
基于使用该timeit
模块的一些(最小)基准测试,以下内容的性能似乎与接受的答案相似,如果不是更好的话
new_lst = [a, *lst]
Run Code Online (Sandbox Code Playgroud)
与[a] + list
这将创建一个新列表而不是 mutate lst
。
如果您的目的是改变列表,请使用lst.insert(0, a)
.
>>> 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
Run Code Online (Sandbox Code Playgroud)
[注意]:
collections.deque
list
在循环Relevant-Post 中比纯 Python 快。
归档时间: |
|
查看次数: |
611044 次 |
最近记录: |