我有两个列表 unsortedList
和 basedList
,我要做的是根据 unsortedList
顺序对 basedList
进行排序,这是一个示例:< /p>
unsortedList = [2, 7, 8]
baseList = [10, 1, 3]
输出应该是 [8, 2, 7]
unsortedlist
元素的顺序应该像 basedList
元素一样排序,所以如果 basedList
的 i 元素是最大值,则 unsortedlist 也应该从最大值开始。>
另一个例子:
unsortedList = [10, 12, 23, 0, 8]
baseList = [30, 7, 9, 10, 13]
输出应该是 [23, 0, 8, 10, 12]
python中是否已经存在任何方法可以实现我的需求?
答案 0 :(得分:2)
这是一种方法:
unsortedList = [2, 7, 8]
baseList = [10, 1, 3]
en=[i for i in enumerate(baseList)]
l=sorted(en, key=lambda x:x[1])
l2=list(zip([i[0] for i in l], sorted(unsortedList)))
l3=sorted(l2, key=lambda x:x[0])
result=[i[1] for i in l3]
print(result)
#[8,2,7]
答案 1 :(得分:1)
这是一个不使用 zip 和 lambda 的解决方案:
unsortedList = [10, 12, 23, 0, 8]
baseList = [30, 7, 13, 7, 1]
#prep step: modifies the baseList based on how often a duplicate number appears
visited = []
for i, number in enumerate(baseList):
visited.append(number)
baseList[i] += visited.count(number)/len(baseList)
#main code
result = []
for item in baseList:
idx = sorted(baseList).index(item)
result.append(sorted(unsortedList)[idx])
print(result)
#prints [23, 8, 12, 10, 0]