sta*_*mer 2 python python-itertools
为什么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']
Run Code Online (Sandbox Code Playgroud)
在控制台中测试之前,我认为结果应该是['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
Run Code Online (Sandbox Code Playgroud)
您不是在过滤字符串,而是要保留或保留一定条件。
当到达"r"的不是元音时,下降时间将停止下降,并取走其余部分;到达"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']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
493 次 |
| 最近记录: |