【发布时间】:2022-01-21 13:46:49
【问题描述】:
简介:
所以我知道已经有一个与我类似的问题 (Skip multiple iterations in loop) 有一个非常好的答案,但我仍有一些悬而未决的问题:
问题一:
没有迭代器有什么办法吗?
我正在寻找类似 * 3 的东西:song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life']
for sing in song:
print(sing, end=" ")
if sing == 'look':
continue * 3
预期输出:
always look side of life
问题2:
如果我必须使用迭代器对象,那么是否可以在固定的时间内完成它?
原来的问题有这样的解决方案:
song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life']
song_iter = iter(song)
for sing in song_iter:
print(sing)
if sing == 'look':
next(song_iter)
next(song_iter)
next(song_iter)
print(next(song_iter))
但我希望它做到这一点,比如说 x = 5 次。这是不可能的:
song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life']
song_iter = iter(song)
for sing in song_iter:
print(sing)
if sing == 'look':
next(song_iter) * x
print(next(song_iter))
那你会怎么做呢?我知道可以使用函数itertools.<b>islice</b>,但是有没有没有任何库的方法?
我的方法:
这很好用:song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life']
song_iter = iter(song)
skip_iterations = 3
for sing in song_iter:
print(sing)
if sing == "look":
while skip_iterations > 0:
next(song_iter, "")
skip_iterations -= 1
输出:
always look side of life
但也许其他人有更好的主意? :)
链接:
The Question I was mentioning - The Answer for that question
【问题讨论】:
-
您的方法似乎足够好,除了我会使用
for循环:for _ in range(skip_iterations): next(song_iter) -
每个
for循环都使用一个迭代器,无论您是否意识到它。使用iter只是让您可以在代码级别访问一个。无论如何,您的问题似乎是:给定一个迭代器对象,我们如何在其上调用next指定次数?好吧 - 您如何通常在 Python 中执行指定次数的任何事情?使用...for循环,对吗?所以.... -
"如果我必须使用迭代器对象,那么是否可以在固定的时间内完成它?" - 使用任意迭代器,不。迭代器是顺序的,而不是随机访问的。例如,链表上的迭代器如果不逐个跟踪链接就无法前进,而生成器甚至没有明确定义的元素,直到您运行它并使其一个一个产生元素。
-
如果你只是迭代一个列表,那么你可以很容易地在恒定时间内跳过,但不能使用标准列表迭代器。您必须编写自己的处理方式。
标签: python loops for-loop iterator continue