在其他列表中查找位置并将该位置应用于其他列表

2024-04-25 23:32:06 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我有3张单子

list1 = [30,14,42,17,18]

list2 = [17,18,6,7,30,9,5,14,3,42,33]

list3 = [[-25,54,789,0.56],[-5,4,9,0.5],[-5,4,0.009,0.8],[-5,456,7,56],
[-5,4,9,0.6],[-2,4,9,-0.578],[-2,0.5,-7,-0.6],[-25,-50,78,0.1],[-4,-58,79,0.6],
[-2,5,7,4],[-5,54,43,0.45]]

list2和list3的长度相同

我的问题是,取list1中的每个值,找到它在list2中的位置,从list3中的相同位置提取值。这些列表是在运行时生成的,即id和值在运行时是不同的


Tags: id列表单子list2list1list3
2条回答

您可以使用带有enumerate的dict理解为dict2创建一个数字到索引映射,然后使用映射将list1中的数字映射到list3中映射索引处的相应子列表:

mapping = {n: i for i, n in enumerate(list2)}
print([list3[mapping[n]] for n in list1])

这将输出:

[[-5, 4, 9, 0.6], [-25, -50, 78, 0.1], [-2, 5, 7, 4], [-25, 54, 789, 0.56], [-5, 4, 9, 0.5]]

注意,首先创建映射将问题的平均时间复杂度降低到O(n)

使用列表理解

In [67]: print [list3[j] for j in [list2.index(i) for i in list1]]
Out[67]: 
[[-5, 4, 9, 0.6],
 [-25, -50, 78, 0.1],
 [-2, 5, 7, 4],
 [-25, 54, 789, 0.56],
 [-5, 4, 9, 0.5]]

或者

In [69]: print [list3[list2.index(i)] for i in list1]
Out[69]: 
[[-5, 4, 9, 0.6],
 [-25, -50, 78, 0.1],
 [-2, 5, 7, 4],
 [-25, 54, 789, 0.56],
 [-5, 4, 9, 0.5]]

相关问题 更多 >