对并行列表进行排序时保持原始位置
在您有并行列表并希望在重新排列另一个列表的同时对一个列表进行排序的情况下以同步的方式,存在一个强大的解决方案。利用“装饰、排序、取消装饰”方法简化了过程,特别是使用 Python 的内置 zip 函数。
Pythonic 解决方案需要创建一个装饰后的 zip 对象,然后对其进行排序,最后提取原始列表从已排序的 zip 中。这种技术保留了两个列表中元素的原始位置。
例如,给定列表:
list1 = [3, 2, 4, 1, 1] list2 = ['three', 'two', 'four', 'one', 'one2']
执行以下代码:
list1, list2 = zip(*sorted(zip(list1, list2)))
将产生:
list1 = [1, 1, 2, 3, 4] list2 = ['one', 'one2', 'two', 'three', 'four']
但是,如果列表为空,则此特定方法将无法正常运行。稍微修改一下就可以解决这个问题:
list1, list2 = (list(t) for t in zip(*sorted(zip(list1, list2))))
Python 提供了另一种就地排序方法,虽然比较冗长,但可以为较小的列表提供轻微的性能提升:
tups = zip(list1, list2) tups.sort() list1, list2 = zip(*tups)
总之,虽然有多种方法可以解决这个问题,但 zip 方法提供了一种简洁高效的解决方案,可以在整个排序过程中保持元素的原始位置。
以上是如何在 Python 中对一个列表进行排序,同时保持并行列表的原始顺序?的详细内容。更多信息请关注PHP中文网其他相关文章!