gpt4 book ai didi

Python 如何检测我是否迭代了列表中的新项目?

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:58 25 4
gpt4 key购买 nike

如何检测我是否迭代了列表中的新项目?

我知道我可以在每个循环后执行变量 += 1,但我不想那样做。如果必须的话,我会去做。

我想要这样的东西:

for i in list:
if i.iterated:
...

但这当然行不通。

例如:

list = ['h', 'e', 'l', 'l', 'o']
for i in list:
pass # I want to add a space (' ') between 'h' and 'e', and join everything after it

换句话说,检测我何时进入另一个迭代

最佳答案

首先,为了避免自己跟踪计数,您可以使用enumerate:

for index, value in enumerate(seq):

现在您将始终知道当前对应的是哪个索引。例如:

>>> for index, value in enumerate(['a', 'b', 'c']):
... print(index, value)
0 a
1 b
2 c

另一种方法是创建一个迭代器,然后对其进行循环:

it = iter(seq)
for value in it:

现在,原始序列仍将具有所有值,但将仅具有您尚未查看的值。

或者,如果你愿意,你可以在上面手动调用next,这样你就可以在某个点停下来,或者使用像itertools.takewhile这样的函数来做那个给你,或者……


如果你根本不想保留这些值,你可以破坏性地修改序列:

while True:
try:
value = seq.pop(0)
except IndexError:
break

(请注意,对于大型列表,这可能会很慢,因为从开头弹出必须将整个列表向上移动。如果您可以从结尾而不是开头弹出,或者使用 deque 相反,这个问题就消失了。)


如果你想,例如,跟踪你上次走了多远,以便下次可以从那个点开始,iterenumerate 应该是足以做到这一点。但如果没有,您始终可以存储到目前为止看到的索引列表,或者使列表包含 [actual_value, False] 对并设置 i[1] = True 当你看到它们时,等等。(那将是对空间的巨大浪费——更重要的是,代码复杂性——除非你有充分的理由这样做。)

关于Python 如何检测我是否迭代了列表中的新项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25194399/

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