通过并行列表排列对列表进行排序
给定两个并行列表,可以对其中一个进行排序,同时对另一个进行同步重新排序。这是通过对第一个列表进行排序并使用重新排序的元素的索引来重新排列第二个列表来实现的。
一种常见的方法是“装饰、排序、取消装饰”习惯用法,它将两个列表压缩,然后对它们进行排序基于第一个列表,然后解压缩结果。使用 Python 的 zip 函数,可以简明地实现如下:
list1, list2 = zip(*sorted(zip(list1, list2)))
但是,对于较大的列表,存在更高效的就地版本:
tups = zip(list1, list2) tups.sort() list1, list2 = zip(*tups)
对于包含非-可以使用可比较元素、使用 lambda 函数的排序索引。或者,可以为排序提供一个关键函数,以避免比较第二个列表的元素:
result1, result2 = zip(*sorted(zip(list1, list2), key=lambda x: x[0]))
空输入应单独处理,并且应该意识到就地版本可能会稍快一些,特别是对于小列表。
以上是如何在 Python 中高效地对两个并行列表进行排序,同时保持同步?的详细内容。更多信息请关注PHP中文网其他相关文章!