以特定顺序对列表进行排序

时间:2021-02-02 14:34:00

标签: python list sorting

我有两个列表 unsortedListbasedList,我要做的是根据 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中是否已经存在任何方法可以实现我的需求?

2 个答案:

答案 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]