给定
a = [1,4,5,3,2,6,0]
b = ['b','e','f','d','c','g','a']
将b
排序,b
的预期顺序在a
的相应位置元素中可用。
输出将是
['a','b','c','d','e','f','g']
尝试其他类似的输入集。
a = [4,0,1,3,2]
b = ['E','A','B','D','C']
我可以使用第三个列表来完成它,即使 sorted()
创建了第三个列表,但关键是要对 b
进行排序
print sorted(b,key=lambda bi : a[b.index(bi)])
问题的核心是如何防止迭代 b
中已经迭代的项目。
最佳答案
试试这个:
zip(*sorted(zip(a, b)))[1]
应该给:
('a', 'b', 'c', 'd', 'e', 'f', 'g')
因为在排序过程中 b
本身似乎是空的(参见 my question about that ),您可以使用该段代码就地完成:
b.sort(key=lambda x, b=b[:]: a[b.index(x)])
这使用 b
的副本 在排序期间进行搜索。这对性能来说肯定不是很好,所以不要怪我 ;-)
关于python - 使用另一个索引列表对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22687110/