itertools.takewhile()访问python中的下一个元素

2024-10-01 17:31:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我面对的问题是我不明白怎么做的itertools.takewhile()代码有效。在

import itertools

z = [3,3,9,4,1]

zcycle = itertools.cycle(z)
next_symbol = zcycle.next()
y = list(itertools.takewhile(lambda symbol: symbol == next_symbol or symbol == 9, zcycle))
print y

我的代码假设从一开始就给我列表中的元素,如果它们相同或者元素等于9。所以一旦我们碰到了和前一个不同的元素,我们就应该停止。在

我原以为结果是[3, 3],但我得到了[3, 9]。 为什么我们错过了列表的第一个元素? 有没有可能得到等于[3, 3, 9]的输出?在


Tags: orlambda代码import元素列表symbollist
2条回答

您从此处的序列中删除了第一个3

next_symbol = zcycle.next()

这会将zcycle推进到下一个元素,因此它将再生成一个{},而不是两个。在

不要对zcycle对象调用next();可以使用z[0]代替:

^{pr2}$

现在zcycle将生成3,然后是另一个3,然后是{},之后{}条件将是{},所有迭代都将停止。在

如果您有一个实际的迭代器,那么使用tee an groupby是可能的:

from itertools import tee, groupby, cycle

z = [3, 3, 9, 4, 1]
zcycle = cycle(z)
a, b = tee(zcycle)
next_symbol = next(b)
grps = groupby(a, key=lambda symbol: symbol in {9, next(b), next_symbol})
g = next(grps)
if g[0]:
    print(list(g[1]))

相关问题 更多 >

    热门问题