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()
の代わりに使用できる 2 番目のバージョンを使用して最大のファミリを選択するにresult
は、次のように使用できます:
>>> max(result.items(), key=lambda k_v: len(k_v[1]))
('- - - -', ['ALLY', 'COOL', 'GOOD'])