python - 使用另一个索引列表对列表进行排序

标签 python algorithm list sorting

给定

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/

相关文章:

python - 如何将十进制转换为不带前缀 `0x` 的十六进制

algorithm - Hash表操作的时间复杂度是O(1)还是O(N)?

c# - 购物车中的特殊逻辑\算法

Java - 根据条件返回列表

c# - C#中如何从List中删除元素?

Python Pandas 转换列数据类型

python - 提取给定数组中的公共(public)元素以生成新数组

list - 在 Jinja2 中合并多个列表

python - 使用子进程获取 print() 实时输出

arrays - 用于堆化数组的堆中的 siftUp 和 siftDown 操作