gpt4 book ai didi

python - 当列表在 python 中有索引时执行循环

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:32 27 4
gpt4 key购买 nike

假设我们有一个索引数量未知的列表,是否可以做类似的事情

i=0
while foo[i]:
...
i+=1

在我的例子中,我得到了错误,因为索引将超出范围,但我想你得到了我想要的?

最佳答案

您正在寻找的是:

for i, elem in enumerate(foo):
#i will equal the index
#elem will be the element in foo at that index
#etc...

enumerate built-in 采用一些序列(如列表或生成器),并生成一个元组,其第一个元素包含迭代编号,第二个元素包含该迭代的序列值。

由于您特别询问“未知数量的索引”,我还想通过添加 enumerate 懒惰地工作来澄清。与 len 不同,它需要提前计算/评估整个序列(假设您正在处理比简单列表更复杂的东西),因此对于无限列表会失败,并采用不确定的一些任意生成器函数的时间量(然后需要再次运行,可能会导致副作用),enumerate 仅评估列表中的下一个序列。这可以通过以下事实来证明:它将在最简单的具有未知条目数的序列示例中按预期执行:无限列表:

import itertools
for i, elem in enumerate(itertools.cycle('abc')):
#This will generate -
# i = 0, elem = 'a'
# i = 1, elem = 'b'
# i = 2, elem = 'c'
# i = 3, elem = 'a'
# and so on, without causing any problems.

编辑 - 回应您的意见:

使用 for ... enumerate ... 本质上比仅使用 for 更昂贵(假设您有执行额外的 enumerate)。 但是,我会争辩说,如果您正在跟踪序列元素的索引,那么这一点点开销对于它提供的非常 pythonic 表示来说是一个很小的代价(也就是说, i=0; i += 1 是一个非常 C 风格的习语。

经过一些搜索,我找到了(然后 agf 更正了 url)the source code for the enumerate function (此外,reversed 函数)。遵循起来非常简单,而且看起来并不昂贵。

关于python - 当列表在 python 中有索引时执行循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7183452/

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