使用集:
使用set.intersection的第一种方法只能找到不相同的连续对,因此
oo不会是匹配项:
s = " There was a boat in the rain near the shore, by some mysterious lake"vowels = "aeiouAEIOU"print([x for x in s.split() if any(len(set(x[i:i+2]).intersection(vowels))== 2 for i in range(len(x))) ])['boat', 'rain', 'near', 'mysterious']
方法2使用set.issubset,因此现在将相同的连续对视为匹配。
使用
set.issubset与函数使用
yield from蟒3语法,这可能是更合适的,并确实捕捉重复相同元音:
vowels = "aeiouAEIOU"def get(x, step): yield from (x[i:i+step] for i in range(len(x[:-1])))print([x for x in s.split() if any(set(pr).issubset(vowels) for pr in get(x, 2))])
或再次在单个列表中:
print([x for x in s.split() if any(set(pr).issubset(vowels) for pr in (x[i:i+2] for i in range(len(x[:-1]))))])
最后,将元音设为一个集合,并检查它是否为任何字符对的set.issuperset:
vowels = {'a', 'u', 'U', 'o', 'e', 'i', 'A', 'I', 'E', 'O'}def get(x, step): yield from (x[i:i+step] for i in range(len(x[:-1])))print([x for x in s.split() if any(vowels.issuperset(pr) for pr in get(x, 2))])


