我如何预先一个整数到一个列表的开始?
[1, 2, 3] ⟶ [42, 1, 2, 3]
我如何预先一个整数到一个列表的开始?
[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_1.insert(0,ur_data)
确保ur_data是字符串类型 所以如果你有数据= int(5)转换为ur_data = str(数据)
你可以使用Unpack列表:
a = 5 li = [1,2,3] li = [a, *li] => [5, 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
>>> x = 42
>>> xs = [1, 2, 3]
>>> [x] + xs
[42, 1, 2, 3]
注意:不要使用list作为变量名。
选择:
>>> 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在循环中比Python纯列表更快。