gpt4 book ai didi

python - 迭代与列表串联

转载 作者:太空狗 更新时间:2023-10-29 18:24:31 25 4
gpt4 key购买 nike

所以有两种方法可以获取一个列表并将第二个列表的成员添加到第一个列表中。您可以使用列表串联,也可以对其进行迭代。您可以:

for obj in list2:
list1.append(obj)

或者你可以:

list1 = list1 + list2

list1 += list2

我的问题是:哪个更快,为什么?我使用两个非常大的列表(超过 10000 个对象)对此进行了测试,似乎迭代方法比列表连接(如 l1 = l1 + l2)快得多。为什么是这样?有人可以解释吗?

最佳答案

append 一次添加一个项目,这是它缓慢的原因,也是对 append 的重复函数调用。

但是在这种情况下,+= 运算符不是 + 的语法糖。 += 运算符实际上并没有创建一个新列表然后将其赋值回来,它修改了左边的操作数。当使用 timeit 时,两者都使用了 10,000 次,这一点非常明显。

>>> timeit.timeit(stmt="l = l + j", setup="l=[1,2,3,4]; j = [5,6,7,8]", number=10000)
0.5794978141784668
>>> timeit.timeit(stmt="l += j", setup="l=[1,2,3,4]; j = [5,6,7,8]", number=10000)
0.0013298988342285156

+= 快得多(大约 500 倍)

您还有用于列表的 extend 方法,它可以将任何可迭代对象(不仅仅是另一个列表)附加到 l.extend(l2)

>>> timeit.timeit(stmt="l.extend(j)", setup="l=[1,2,3,4]; j = [5,6,7,8]", number=10000)
0.0016009807586669922
>>> timeit.timeit(stmt="for e in j: l.append(e)", setup="l=[1,2,3,4]; j = [5,6,7,8]", number=10000)
0.00805807113647461

逻辑上等同于追加,但如您所见要快得多。

所以解释一下:迭代比 + 快,因为 + 必须构建一个全新的列表

extend 比迭代更快,因为它是内置的列表方法并且已经过优化。逻辑上等同于重复追加,但实现方式不同。

+=extend 更快,因为它可以就地修改列表,知道列表需要多大,并且无需重复调用函数。它假定您要将列表附加到另一个列表/元组

关于python - 迭代与列表串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17479361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com