Python – 实际订单索引距离
有时我们有一个未排序的列表,我们希望找到元素在排序时的实际位置,即我们希望构造一个列表,如果列表已排序,则该列表可以给出到每个元素的位置距离。这在 Web 开发和竞争性编程领域有很好的应用。让我们讨论一些可以做到这一点的方法。
方法 #1:使用sorted() + index()
+ 列表推导
以上所有函数可以结合起来实现这一特定任务。 sorted函数返回排序后的顺序,索引由 index函数完成。列表理解的任务是完成整个列表元素并整合这两个任务。
# Python3 code to demonstrate
# Actual order index distance
# 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
# Actual order index distance
temp = sorted(test_list)
res = [abs(temp.index(ele) - idx) for idx, ele in enumerate(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, 1, 2, 2, 0, 2]
方法 #2:使用map() + enumerate() + dictionary comprehension + sorted()
使用字典推导代替列表推导,形成排序列表,使用枚举遍历排序列表中实际排序的索引距离,得到键值对,然后通过映射获取列表中的所有索引。
# Python3 code to demonstrate
# Actual order index distance
# 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()
# Actual order index distance
temp = {val: abs(key - test_list.index(val)) 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, 1, 2, 2, 0, 2]