这是卡塔的挑战。该函数应返回字符串中后续元音的最大数量。
我自己完成后发现这个非常实用的解决方案。
有人可以一步步解释代码吗?我想在这里彻底了解 join 和 split 位是如何相互补充的。
def solve(string):
return max(map(len, ''.join(i if i in 'aeiou' else ' ' for i in string).split()))
请您参考如下方法:
在这些情况下,最好的办法是简化并分成更小的部分。 join 只是将条件生成器理解中由元音或空格组成的字符串序列连接在一起:
s = 'aei234roieeieigfh'
out1 = ''.join(i if i in 'aeiou' else ' ' for i in s)
# 'aei oieeiei '
以上只是编写以下生成器函数的一种奇特方式:
def f(s):
for i in s:
if i in 'aeiou':
yield i
else:
yield ' '
''.join(f(s))
# 'aei oieeiei '
然后通过拆分你得到一个字符串列表:
out2 = out1.split()
# ['aei', 'oieeiei']
然后通过与 len 的映射,您将获取列表中每个项目的 len:
list(map(len, out2))
# [3, 7]
这等同于:
[len(i) for i in out2]
# [3, 7]
最后,通过取 max,您将找到列表中最长的元音序列。
我个人会在这里使用 itertools.groupby :)
max(len(list(v)) for k,v in groupby(s, key=lambda x: x in 'aeiou') if k)
# 7
一些您可能会觉得有用的读物:
