【发布时间】:2022-01-24 18:35:41
【问题描述】:
给定要更新的索引列表,如何更新列表。
例如,假设我们有一个列表
l = ['4', '5', '8', '19', '2', '53', '125']
和
indexes = [0, 1, 4, 5]
假设我们要将这些索引更新为int。所需的更新列表将是
l = [4, 5, '8', '19', 2, 53, '125']
是的,我们可以通过如下循环轻松完成:
for i in indexes:
l[i] = int(l[i])
但实际上,这样的事情要快一些
l[0] = int(l[0])
l[1] = int(l[1])
l[4] = int(l[4])
l[5] = int(l[5])
这里的速度差异可能不会很明显,因为只有 4 个项目,但是一旦有 40 个或更多,您就可以看到差异。但是写这么多重复语句也很痛苦。
有没有办法对此进行更多优化,也许使用map 并生成一个列表来更新列表(仅基于特定索引或类似的东西)
【问题讨论】:
-
如果索引列表是动态的,那么循环是唯一的方法。
-
你用更大的列表实际测量过速度差异吗?我认为这将是微不足道的。将字符串转换为 int 的成本远远超过遍历列表的成本。
-
请注意 PEP 8 specifically lists 小写“L”作为 Python 中要避免的名称。
-
我看到循环增加了约 10%(与无循环版本相比),使用
timeit并更新列表中的大约 40 个项目 -
老实说,您在这里犯了过早的优化。 for 循环代码更易于编写、更易于阅读,并且可以处理任意列表。更新时间还不到最初创建列表时间的一半。像这样的代码几乎永远不会成为关键路径。
标签: python list optimization