Python 将列表拆分为由另一个列表分组确定的组
假设我有两张清单Python 将列表拆分为由另一个列表分组确定的组,python,list,grouping,Python,List,Grouping,假设我有两张清单 a = [True, True, True, False, False, True, False] b = [1, 2, 1, 3, 2, 1, 0] 我可以将一个列表分组为类似的项目: import itertools b = [list(g) for k, g in itertools.groupby(a)] >>> [[True, True, True], [False, False], [True], [False]] 是否有一种方便的方法将此
a = [True, True, True, False, False, True, False]
b = [1, 2, 1, 3, 2, 1, 0]
我可以将一个列表分组为类似的项目:
import itertools
b = [list(g) for k, g in itertools.groupby(a)]
>>> [[True, True, True], [False, False], [True], [False]]
是否有一种方便的方法将此操作应用于其他列表,以提供:
>>> [[1,2,1], [3,2], [1], [0]]
这很管用,但有更好的吗
new_list = []
index = 0
for i in b:
length = len(i)
new_list.append(y[index:index+length])
index += length
谢谢您可以在
枚举(a)
上分组:
我想,选择布尔值是个坏主意。我完全看不到这种模式。你能至少发布预期的输出吗?很抱歉没有说清楚,预期的输出是[[1,2,1],[3,2],[1],[0]]有什么方法可以使用相同的索引引用,但在n个列表上?e、 g.[list1[y]表示lst中的y]表示lst中的索引,[list2[y]表示lst中的y]表示lst中的索引]等。。当我尝试在多个列表上使用相同的引用时,我得到一个空列表!话虽如此,它作为一个函数工作得很好:def index(ref):return((x[0]表示x in g)表示g,in groupby(enumerate(ref),key=itemgetter(1)),然后[[anylist[x]表示x in lst]表示lst in index(ref)]
from itertools import groupby, izip
groups = [list(grp) for _, grp in groupby(izip(a, b), lambda x: x[0])]
print [[number for _, number in items] for items in groups]
# [[1, 2, 1], [3, 2], [1], [0]]
>>> from itertools import groupby
>>> from operator import itemgetter
>>> indices = ((x[0] for x in g) for _, g in groupby(enumerate(a), key=itemgetter(1)))
>>> [[b[x] for x in lst] for lst in indices]
[[1, 2, 1], [3, 2], [1], [0]]