如何根据 Python 中另一个列表的(子列表)索引对列表进行分区
How to partition a list based on (sublist) indices of another list in Python
我有两个列表,一个包含一些独特的元素(在我的例子中是整数),另一个包含指示应将元素插入到新创建的嵌套列表的子列表中的索引。
elements = [1, 2, 3, 4, 5, 6]
indices = [0, 0, 1, 2, 2, 1]
expected_result = [[1, 2], [3, 6], [4, 5]]
元素列表仅包含唯一项,可能未排序。
索引列表是 'normalized',因此较低的索引总是先出现。
新的嵌套列表应该使用索引来确定元素应属于的预期结果的子列表。
我想出了以下功能,但我觉得应该有更简单的方法。
def indices_to_nested_lists(indices: Sequence[int], elements: Sequence):
result = []
for i in range(max(indices)+1):
sublist = []
for j in range(len(elements)):
if indices[j] == i:
sublist.append(elements[j])
result.append(sublist)
return result
谁能想出一种更简单、也许更 pythonic 的方法来实现相同的结果?
尝试将此 for 循环与 zip
一起使用:
l = [[] for i in range(max(indices) + 1)]
for x, y in zip(elements, indices):
l[y].append(x)
print(l)
输出:
[[1, 2], [3, 6], [4, 5]]
我有两个列表,一个包含一些独特的元素(在我的例子中是整数),另一个包含指示应将元素插入到新创建的嵌套列表的子列表中的索引。
elements = [1, 2, 3, 4, 5, 6]
indices = [0, 0, 1, 2, 2, 1]
expected_result = [[1, 2], [3, 6], [4, 5]]
元素列表仅包含唯一项,可能未排序。 索引列表是 'normalized',因此较低的索引总是先出现。 新的嵌套列表应该使用索引来确定元素应属于的预期结果的子列表。
我想出了以下功能,但我觉得应该有更简单的方法。
def indices_to_nested_lists(indices: Sequence[int], elements: Sequence):
result = []
for i in range(max(indices)+1):
sublist = []
for j in range(len(elements)):
if indices[j] == i:
sublist.append(elements[j])
result.append(sublist)
return result
谁能想出一种更简单、也许更 pythonic 的方法来实现相同的结果?
尝试将此 for 循环与 zip
一起使用:
l = [[] for i in range(max(indices) + 1)]
for x, y in zip(elements, indices):
l[y].append(x)
print(l)
输出:
[[1, 2], [3, 6], [4, 5]]