以正方形为键的Python排序

2024-06-17 09:17:22 发布

您现在位置:Python中文网/ 问答频道 /正文

在一本书上看到了一些代码,但就是无法理解,甚至试图通过一步一步地运行来破译,但对我来说它仍然是希腊语。。。(第二个星期一行程) (我有点了解每个部分,例如rangesortedlambda-除了放在一起)

sorted(range(-3,4), key=lambda x: x*x)

输出:

[0,-1,1,-2,2,-3,3]

Tags: lambdakey代码rangesorted行程
3条回答
sorted(range(-3,4), key=lambda x: x*x)

试着一步一步地做。 让我们从range开始,这里将提供数字-3-2-10123

sorted然后在每个项目上运行,并使用key参数中提供的函数。这些项中的每一项都通过lambdax参数传递。然后lambda处理这个x(表示为range中的数字)并执行一些操作,在您的例子中,它只获取数字x的平方。然后返回平方值,sorted函数使用此返回的平方值以升序进行比较(请记住sorted以升序排列列表,除非指定为reverse=True

key函数的目的是只告诉如何比较所传递的iterable/list中的每个项。但它不会影响将返回的元素的最终列表。它仍将使用已传递的列表。因此,这些值-3-2-10123将是sorted函数返回的列表的元素,仅按照key参数进行排列

希望它有帮助,有意义

range定义为range(start, stop, step),不包括stop参数

定义为sorted(iterable, key=key, reverse=reverse)sorted似乎是这样工作的:

输出原始输入值,但按键排序,在本例中按其平方排序。正方形将负值转换为正值,然后应用排序,最后按顺序返回原始值

在命令行上对此进行了测试:

print(sorted(range(-3,4)))
# [-3, -2, -1, 0, 1, 2, 3]

print(sorted(range(-3,4), key=lambda x: x*x))
# [0, -1, 1, -2, 2, -3, 3]

(a1);;它表示sorted()(以及sort())排序都是稳定的

Sorts are guaranteed to be stable. That means that when multiple records have the same key, their original order is preserved.

它是这样工作的:b

range函数返回值[-3, -2, -1, 1, 2, 3]

现在,令人困惑的关键参数为每个要排序的值调用lambda,而使用这些值对它们进行排序

这意味着列表是按平方[9,4,1,0,1,4,9]排序的,而不是按range函数返回的实际数字排序的

例如:

sorted(range(-3,4), key=lambda x: x*-1)

将返回[3, 2, 1, 0, -1, -2, -3]

相关问题 更多 >