按连续的公共元素拆分列表

普杜布瓦

我的以下列表仅包含两个字符“ 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章