>> def vowel(c):-6ren">
gpt4 book ai didi

python - 为什么 dropwhile 和 takewhile 会跳过最后一个 a?

转载 作者:行者123 更新时间:2023-11-28 21:04:40 25 4
gpt4 key购买 nike

为什么 dropwhiletakewhile 会跳过下面例子中的最后一个 a

>>> import itertools
>>> s = "Aardvark"
>>> def vowel(c):
... return c.lower() in "aeiou"
...
>>> list(itertools.dropwhile(vowel, s))
['r', 'd', 'v', 'a', 'r', 'k']
>>> list(itertools.takewhile(vowel, s))
['A', 'a']

在控制台测试之前,我认为结果应该是 ['r', 'd', 'v', 'r', 'k']['A' , 'a', 'a'].

文档说了dropwhiletakewhile的大致实现如下:

def dropwhile(predicate, iterable):
# dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1
iterable = iter(iterable)
for x in iterable:
if not predicate(x):
yield x
break
for x in iterable:
yield x

def takewhile(predicate, iterable):
# takewhile(lambda x: x<5, [1,4,6,4,1]) --> 1 4
for x in iterable:
if predicate(x):
yield x
else:
break

最佳答案

您不是在过滤字符串,而是在保持特定条件时丢弃或获取

drop-while 在到达非元音的"r" 时停止drop-while,取其余部分,take-while 在到达"r" 不是元音字母,去掉其余部分。

您所描述的行为可以通过 filter 获得:

>>> list(filter(lambda x: x.lower() in 'aeoui', "Aardvark"))
['A', 'a', 'a']
>>> list(filter(lambda x: x.lower() not in 'aeoui', "Aardvark"))
['r', 'd', 'v', 'r', 'k']

关于python - 为什么 dropwhile 和 takewhile 会跳过最后一个 a?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44997849/

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