我是编程和学习排序功能的新手。当我进行搜索并查看了许多有关sort / lambda的SO文章时,甚至与我的情况非常相似,但我仍然很难理解该代码的工作原理。我还阅读了文档(https://docs.python.org/3/howto/sorting.html),那里的示例对我来说很有意义,但我似乎无法在此处将这个知识带到此示例中。有人会友好地为我提供以下代码吗?我知道这可能是重复的,但我只是问一下,因为我没有从其他类似文章中获得的知识。如果可以的话请帮助,谢谢。
a = [13, 15, 81, 4]
b = [0, 1, 2, 3]
b.sort(key = lambda x:a[x])
b = [3, 0, 1, 2]
列表'b'的顺序如何从[0,1,2,3]变为[3,0,1,2]?列表“ a”如何发挥作用?
答案 0 :(得分:5)
它对b
进行排序,就好像b
中的每个元素都具有a
中相应值的值一样。如果对由每个值组成的元组进行排序,可能会有助于了解会发生什么。
>>> sorted(zip(a, b))
[(4, 3), (13, 0), (15, 1), (81, 2)]
请注意每个元组的第二个元素,它们按照第一个元素的顺序排序。
答案 1 :(得分:1)
b
的值很重要 b
的值很重要,因为它们用于索引到a
中。您最初给出的示例不会引发错误,因为每个b
的值都可以用作从b
检索值的索引。
换句话说,如果b
的值从[0, 1, 2, 3]
变为[1, 2, 3, 4]
,这将导致IndexError
作为最后一个元素4
,将指向a
中不存在的第五个元素。
b
按以下函数排序(又称原始lambda函数)。
def anonymous(x):
return a[x]
实际情况是,b
的每个值都用作a
的索引,以检索和比较a
的值。
a[0] = 13
a[1] = 15
a[2] = 81
a[3] = 4
在这里,我们以升序对每个等式的右侧进行排序:[4, 13, 15, 81]
。然后,我们以相同的顺序获取b
的相应值:[3, 0, 1, 2]
,这将产生最终的排序数组b
。