鉴于,
list_1 = [1,2,3,4]
list_2 = [5,6,7,8]
在python中实现以下功能的最快方式是什么?
list = [1,2,3,4,5,6,7,8]
请注意,在python中合并两个列表的方法有很多种。我正在寻找最有效率的方式。
[编辑] ++++++++++++++++++++++++++++++++++++++++++++ [编辑]
感谢所有答案。得到你的想法,我尝试了以下,这是我的理解。
CODE
import time
c = list(range(1,10000000))
c_n = list(range(10000000, 20000000))
start = time.time()
c = c+c_n
print len(c)
print time.time() - start
c = list(range(1,10000000))
start = time.time()
for i in c_n:
c.append(i)
print len(c)
print time.time() - start
c = list(range(1,10000000))
start = time.time()
c.extend(c_n)
print len(c)
print time.time() - start
输出
19999999
0.125061035156
19999999
1.02858018875
19999999
0.03928399086
因此,如果有人不在问题中重复使用list_1 / list_2,那么扩展就是最佳选择。另一方面,“+”是最快的方法。
我不确定其他选择。
再次感谢: - )
答案 0 :(得分:22)
您可以使用连接:
list = list_1 + list_2
如果你不需要保留list_1,你可以修改它:
list_1.extend(list_2)
答案 1 :(得分:7)
list_1 + list_2
做到了。示例 -
>>> list_1 = [1,2,3,4]
>>> list_2 = [5,6,7,8]
>>> list_1 + list_2
[1, 2, 3, 4, 5, 6, 7, 8]
答案 2 :(得分:4)
我测试了几种合并两个列表的方法(见下文),并在每次运行几次以规范化缓存更改(相差15%)之后得出了以下顺序。
import time
c = list(range(1,10000000))
c_n = list(range(10000000, 20000000))
start = time.time()
*insert method here*
print (time.time()-start)
方法1:c.extend(c_n)
方法2:c += c_n
方法3:c = c + c_n
方法4:c = [*c, *c_n]
结论
如果要就地合并,请使用+=
或.extend()
。它们明显更快。
答案 3 :(得分:1)
如果您使用的是python3,还有另一种方法可以做到这一点,并且速度更快(仅在python 3.7上进行了测试)
[*list1, *list2]
基准
from timeit import timeit
x = list(range(10000))
y = list(x)
def one():
x + y
def two():
[*x, *y]
print(timeit(one, number=1000, globals={'x':x, 'y': y}))
print(timeit(two, number=1000, globals={'x':x, 'y': y}))
0.10456193100253586
0.09631731400440913
答案 4 :(得分:0)
a=[1,2,3]
b=[4,5,6]
c=a+b
print(c)
输出:
>>> [1, 2, 3, 4, 5, 6]
在上面的代码中,“ +”运算符用于将2个列表连接为一个列表。
另一个解决方案:
a=[1,2,3]
b=[4,5,6]
c=[] #Empty list in which we are going to append the values of list (a) and (b)
for i in a:
c.append(i)
for j in b:
c.append(j)
print(c)
输出:
>>> [1, 2, 3, 4, 5, 6]