Python|查找列表中元素的相对顺序
有时我们有一个未排序的列表,我们希望找到元素在排序时的实际位置,即我们希望构造一个列表,如果列表已排序,则该列表可以为每个指定的元素提供位置。这在 Web 开发和竞争性编程领域有很好的应用。让我们讨论一些可以做到这一点的方法。
方法 #1:使用sorted() + index()
+ 列表推导
以上所有函数可以结合起来实现这一特定任务。 sorted函数返回排序后的顺序,索引由 index函数完成。列表理解的任务是完成整个列表元素并整合这两个任务。
# Python3 code to demonstrate
# Finding relative order of elements in list
# using sorted() + index() + list comprehension
# initializing list
test_list = [6, 3, 1, 2, 5, 4]
# printing original list
print("The original list is : " + str(test_list))
# using sorted() + index() + list comprehension
# Finding relative order of elements in list
temp = sorted(test_list)
res = [temp.index(i) for i in test_list]
# printing result
print ("The relative ordering list is : " + str(res))
输出 :
The original list is : [6, 3, 1, 2, 5, 4]
The relative ordering list is : [5, 2, 0, 1, 4, 3]
方法 #2:使用map() + enumerate()
+ 字典理解 + sorted()
使用字典推导代替列表推导,形成排序列表,并使用枚举遍历排序列表中的实际排序索引以获得键值对,然后通过映射获取列表中的所有索引。
# Python3 code to demonstrate
# Finding relative order of elements in list
# using map() + enumerate() + dictionary comprehension + sorted()
# initializing list
test_list = [6, 3, 1, 2, 5, 4]
# printing original list
print("The original list is : " + str(test_list))
# using map() + enumerate() + dictionary comprehension + sorted()
# Finding relative order of elements in list
temp = {val: key for key, val in enumerate(sorted(test_list))}
res = list(map(temp.get, test_list))
# printing result
print ("The relative ordering list is : " + str(res))
输出 :
The original list is : [6, 3, 1, 2, 5, 4]
The relative ordering list is : [5, 2, 0, 1, 4, 3]