gpt4 book ai didi

python - 按连续的公共(public)元素拆分列表

转载 作者:太空宇宙 更新时间:2023-11-03 12:59:29 25 4
gpt4 key购买 nike

我有以下列表,其中仅包含两个字符“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(...))

关于python - 按连续的公共(public)元素拆分列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27776284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com