[英]Longest vowel substring - Python
這是來自卡塔的挑戰。 function 應返回字符串中后續元音的最大數量。
我自己完成后發現了這個非常實用的解決方案。
有人可以逐步解釋代碼嗎? 我想在這里徹底了解連接位和拆分位是如何相互完成的。
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 '
以上只是編寫以下生成器 function 的一種奇特方式:
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
來 go :)
max(len(list(v)) for k,v in groupby(s, key=lambda x: x in 'aeiou') if k)
# 7
一些你可能會覺得有用的讀物:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.