作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
>> def vowel(c):-6ren">
为什么 dropwhile
和 takewhile
会跳过下面例子中的最后一个 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']
.
文档说了dropwhile
和takewhile
的大致实现如下:
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/
我是一名优秀的程序员,十分优秀!