0

我想根据存储它的顺序myList的另一个列表(myorderList)进行排序。例如,myorderList=[3,1,2] 表示 的第一个元素myList映射到“二”,因为最小的数字是 1,myorderList然后是“一”,最后一个元素按照 的顺序映射到“零” myorderList

我已经这样做了,但我觉得这不是映射myList. 我正在寻找一种更好的方法来做到这一点。

    myorderList=[]
    myneworderedList=[]
    myList=["zero","two","one"]
    myorderList=[3,1,2]
    for i in range(len(myList)):# just to eliminate index out of range error
        myneworderedList.append(i)

    for index,item in enumerate(myorderList):
        myneworderedList[int(item)-1]=myList[index]
    print myneworderedList

结果:

['two', 'one', 'zero']
4

1 回答 1

4

一种选择是将两个列表压缩在一起,排序并仅从结果中提取您感兴趣的位:

>>> [y for x, y in sorted(zip(myorderList, myList))]
['two', 'one', 'zero']

另一种选择是使用自定义键函数以正确的顺序返回顺序键:

>>> it = iter(myorderList)
>>> sorted(myList, key=lambda x: next(it))
['two', 'one', 'zero']

Python 保证 key 函数在输入列表的每个项目中以正确的顺序调用一次。

更具体地说,在开始对输入列表进行排序之前,sorted()实现会遍历列表并为每个项目调用 key 函数。上面给出的 key 函数忽略了它的参数并简单地从 中返回下一项myorderList,这导致所需的键用于 的每个元素myList。在此之后,sorted()根据先前确定的键对列表进行排序。

于 2013-09-08T21:30:21.557 回答