gpt4 book ai didi

python - 使用 Dropwhile 从嵌套循环快进 xrange?

转载 作者:太空宇宙 更新时间:2023-11-04 03:39:40 24 4
gpt4 key购买 nike

我看过相关帖子,但不太了解这个问题。我正在寻找一种在外循环中快进迭代器而不在循环中调用 next() 的方法。

答案可能只是在内循环中使用相同的迭代器,但我认为 itertools 可能是一种不错的方法,我正在使用 dropwhile() 但它没有达到我的预期。

所以我在循环中有一个循环:

cl = ['a', 'b', 'c', 'd', 'e']
rangeiter = xrange(0, len(cl))
for x in rangeiter:
print('{}-'.format(x)),
for y in xrange(x, len(cl)):
print('{}'.format(cl[y])),
if y == 3:
print
break
# fast forward parent range
rangeiter = dropwhile(lambda v: v < y, rangeiter)

我希望外循环跳过内循环已处理的所有索引。我以为 dropwhile 会这样做,但我得到的是:

0- a b c d
1- b c d
2- c d
3- d
4- e

当我想要的时候

0- a b c d
4- e

The code is here .

谢谢!

最佳答案

for 循环为可迭代对象创建了一个迭代器; xrange() 是一个序列(可迭代),而不是迭代器。

显式创建迭代器,然后通过使用 dropwhile()(迭代该对象!)跳过元素来推进迭代器:

cl = ['a', 'b', 'c', 'd', 'e']
rangeiter = iter(xrange(0, len(cl)))
for x in rangeiter:
print('{}-'.format(x)),
for y in xrange(x, len(cl)):
print('{}'.format(cl[y])),
if y == 3:
print
break
# fast forward parent range
next(dropwhile(lambda v: v < y, rangeiter), None)

请注意,dropwhile 我将您的dropwhile 条件调整为基于y 而非x 前进;您的预期输出表明您希望将外部范围推进到内部循环所达到的范围之外。

关于python - 使用 Dropwhile 从嵌套循环快进 xrange?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27109013/

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