我的以下列表仅包含两个字符“ N”和“ C”
ls = ['N', 'N', 'N', 'C', 'C', 'C', 'C', 'N', 'C', 'C']
我想做的是提取连续的“ C”并返回列表中的索引。
产生类似
chunk1 = [('C', 'C', 'C', 'C'), [3,4,5,6]]
chunk2 = [('C', 'C'), [8,9]]
# and when there's no C it returns empty list.
如何在Python中实现?
我尝试了此操作,但未如我所愿:
from itertools import groupby
from operator import itemgetter
tmp = (list(g) for k, g in groupby(enumerate(ls), itemgetter(1)) if k == 'C')
zip(*tmp)
移动zip(*...)
列表内的内容:
import itertools as IT
import operator
ls = ['N', 'N', 'N', 'C', 'C', 'C', 'C', 'N', 'C', 'C']
[list(zip(*g))[::-1]
for k, g in IT.groupby(enumerate(ls), operator.itemgetter(1))
if k == 'C']
产量
[[('C', 'C', 'C', 'C'), (3, 4, 5, 6)], [('C', 'C'), (8, 9)]]
在Python2中,list(zip(...))
可以替换为zip(...)
,但由于在Python3中zip
返回迭代器,因此我们需要list(zip(...))
。要使该解决方案与Python2和Python3兼容,请在list(zip(...))
此处使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句