如何根据特定索引重新排列嵌套列表

时间:2017-11-02 17:32:59

标签: python python-2.7 list nested-lists

我有一个嵌套列表如下:

nli=[[123,12],[124,15],[127,19],[12,6]]

我想根据另一个列表li重新排列上面的嵌套列表:

li=[15,6,12,19]

其中li值对应于嵌套列表的第二个元素nli那么如何根据实习生对应的nli的顺序重新排列li每个嵌套列表nli的第二个元素 重新排列nli后的输出假设为:

[[124, 15], [12, 6], [123, 12], [127, 19]]

还想知道在哪里可以了解有关这类操作的更多信息 在此先感谢!!

4 个答案:

答案 0 :(得分:2)

您可以先创建dict,将元素的值映射到列表li中的显示顺序。

>>> order = {k: i for i, k in enumerate(li)}
>>> order
{19: 3, 12: 2, 6: 1, 15: 0}

然后使用order根据每个[1]元素对原始列表进行排序。

>>> sorted(nli, key = lambda i: order[i[1]])
[[124, 15], [12, 6], [123, 12], [127, 19]]

答案 1 :(得分:1)

您可以使用nli的每个值中最后一个元素的索引值进行排序:

nli=[[123,12],[124,15],[127,19],[12,6]]
li=[15,6,12,19]
new_list = sorted(nli, key=lambda x:li.index(x[-1]))

输出:

[[124, 15], [12, 6], [123, 12], [127, 19]]

答案 2 :(得分:1)

首先按需要键映射(创建索引):

by_second_item = {item[1]: item for item in nli}

现在使用映射创建新列表:

rearranged = [by_second_item[i] for i in li]
# or: list(map(by_second_item.get, li))

答案 3 :(得分:1)

[j for i in li for j in nli if j[1]==i]
#Output
#[[124, 15], [12, 6], [123, 12], [127, 19]]