Python ordering the list according to another list
本问题已经有最佳答案,请猛点这里访问。
我想根据存储它的顺序的另一个列表(
我已经做到了,但我觉得这不是一个好的方法来映射
1 2 3 4 5 6 7 8 9 10 | 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 |
结果是:
1 | ['two', 'one', 'zero'] |
号
一个选项是将两个列表压缩在一起,排序,并只从结果中提取您感兴趣的位:
1 2 | >>> [y for x, y in sorted(zip(myorderList, myList))] ['two', 'one', 'zero'] |
另一个选项是使用自定义键函数,以正确的顺序返回顺序键:
1 2 3 | >>> it = iter(myorderList) >>> sorted(myList, key=lambda x: next(it)) ['two', 'one', 'zero'] |
号
python保证按正确的顺序对输入列表中的每个项调用一次键函数。
更具体地说,在开始对输入列表进行排序之前,