我有这个列表,其中只包含 Ws 和 Ss:
ls = ['W', 'S', 'S', 'S', 'W', 'W', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'W', 'W', 'W', 'W', 'W', 'W', 'S']
我想做的是提取该列表中最长的不间断“S”? 并返回该 Ss 的索引,返回:
['S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S']
和
[6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
我怎样才能做到这一点?
最佳答案
使用itertools.groupby
与 enumerate
和 max
:
>>> from operator import itemgetter
>>> from itertools import groupby
>>> val = max((list(g) for k, g in
groupby(enumerate(ls), itemgetter(1)) if k == 'S'), key=len)
>>> indices, items = zip(*val)
>>> indices
(6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)
>>> items
('S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S')
关于python - 在列表中查找最长的不间断公共(public)元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27476771/