在 Python 中分割列表列表

我有一个长度相同的列表列表。我想将第一个列表分割成给定值的连续运行。然后我想分割剩余的列表以匹配从第一个列表生成的段。


例如:


Given value: 2


Given list of lists: [[0,0,2,2,2,1,1,1,2,3], [1,2,3,4,5,6,7,8,9,10], [1,1,1,1,1,1,1,1,1,1]


Return: [ [[2,2,2],[2]], [[3,4,5],[9]], [[1,1,1],[1]] ]

我得到的最接近的是通过以下方式获取索引:


>>> import itertools

>>> import operator

>>> x = 2

>>> L = [[0,0,2,2,2,1,1,1,2,3],[1,2,3,4,5,6,7,8,9,10],[1,1,1,1,1,1,1,1,1,1]]

>>> I = [[i for i,value in it] for key,it in itertools.groupby(enumerate(L[0]), key=operator.itemgetter(1)) if key == x]

>>> print I

[[2, 3, 4], [8]]

此代码是根据此站点上的另一个问题修改的。


我想找到最有效的方法,因为这些列表可能很长。


编辑:


也许如果我将列表放在一起,可能会更清楚:


[[0,0,[2,2,2],1,1,1,[2],3], -> [2,2,2],[2]

 [1,2,[3,4,5],6,7,8,[9],10],-> [3,4,5],[9]

 [1,1,[1,1,1],1,1,1,[1],1]] -> [1,1,1],[1]


www说
浏览 160回答 2
2回答

森栏

您可以使用groupby以组的起始索引和长度的元组的形式创建组列表,并使用此列表从每个子列表中提取值:from itertools import groupbyfrom operator import itemgetterdef match(L, x):    groups = [(next(g)[0], sum(1 for _ in g) + 1)        for k, g in groupby(enumerate(L[0]), key=itemgetter(1)) if k == x]    return [[lst[i: i + length] for i, length in groups] for lst in L]以便:match([[0,0,2,2,2,1,1,1,2,3], [1,2,3,4,5,6,7,8,9,10], [1,1,1,1,1,1,1,1,1,1]], 2)返回:[[[2, 2, 2], [2]], [[3, 4, 5], [9]], [[1, 1, 1], [1]]]

杨魅力

l=[[0,0,2,2,2,1,1,1,2,3], [1,2,3,4,5,6,7,8,9,10], [1,1,1,1,1,1,1,1,1,1]]temp=l[0]value=2dict={}k=-1prev=-999for i in range(0,len(temp)):    if(temp[i]==value):        if(prev!=-999 and prev==i-1):            if(k in dict):                dict[k].append(i)            else:                dict[k]=[i]        else:            k+=1            if(k in dict):                dict[k].append(i)            else:                dict[k]=[i]        prev=ioutput=[]for i in range(0,len(l)):    single=l[i]    final=[]    for keys in dict: #{0: [2, 3, 4], 1: [8]}        ans=[]        desired_indices=dict[keys]        for j in range(0,len(desired_indices)):            ans.append(single[desired_indices[j]])        final.append(ans)    output.append(final)print(output) #[[[2, 2, 2], [2]], [[3, 4, 5], [9]], [[1, 1, 1], [1]]]这似乎是一种方法,首先创建传染性元素的字典,然后在每个列表中查找该键并存储在输出中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python