from itertools import groupby
words = ['ALLY', 'BETA', 'COOL', 'DEAL', 'ELSE', 'FLEW', 'GOOD', 'HOPE', 'IBEX']
e_locs = sorted(([c == 'E' for c in w], i) for i, w in enumerate(words))
result = [[words[i] for x, i in g] for k, g in groupby(e_locs, lambda x: x[0])]
结果:
>>> result
[['ALLY', 'COOL', 'GOOD'], ['HOPE'], ['FLEW', 'IBEX'], ['BETA', 'DEAL'], ['ELSE']]
这是一个版本,它还跟踪 Es 的位置:
words = ['ALLY', 'BETA', 'COOL', 'DEAL', 'ELSE', 'FLEW', 'GOOD', 'HOPE', 'IBEX']
result = {}
for word in words:
key = ' '.join('E' if c == 'E' else '-' for c in word)
if key not in result:
result[key] = []
result[key].append(word)
结果:
>>> pprint.pprint(result)
{'- - - -': ['ALLY', 'COOL', 'GOOD'],
'- - - E': ['HOPE'],
'- - E -': ['FLEW', 'IBEX'],
'- E - -': ['BETA', 'DEAL'],
'E - - E': ['ELSE']}
选择最大的家庭(使用第一个版本,result
列表列表在哪里):
>>> max(result, key=len)
['ALLY', 'COOL', 'GOOD']
要使用第二个版本选择最大的家庭,您可以使用result.values()
而不是result
,或者获取包含 E 位置和家庭的元组,您可以使用以下内容:
>>> max(result.items(), key=lambda k_v: len(k_v[1]))
('- - - -', ['ALLY', 'COOL', 'GOOD'])