下面是问题的链接:https://codeforces.com/contest/977/problem/D
下面是解决问题的正确代码:
n = int(input())
l = list(map(int, input().split()))
def conv(n):
i = 0
while n % 2 == 0:
i += 1
n /= 2
return (-n, i)
l.sort(key=conv)
print(*l)我无法理解key = conv是如何工作的,基于什么基础,以及列表(l)是如何排序的?
编辑:
让我们以当l = 4,8,6,3,12,9时的例子为例。现在不是return (-n,i),而是print(-n,i)。-n,i的值如下所示:
-1.0 3
-3.0 1
-3 0
-3.0 2
-9 0在我看来,l应该是-9,-3,-3,-3,0,0,-1,1,2,3 -但很明显,情况并非如此,l是9,3,6,12,4,8,有人能告诉我发生了什么吗?
发布于 2020-11-25 15:37:08
让我们看看每个元素要返回的值是什么:
元素.-1*n(t1) .i(t2)
4.-1 .2
8.-1 ...............3
6.-3 .1
3.-3 .0
12.-3 .2
9.-9 .0
现在,元素将根据t1的值之间的比较进行排序,如果它们相等,则根据t2进行排序。(升序)
让我们把它们排列一下:
9.->.-9,0
3.->.-3,0
6.>.-3,1
12 .->.-3,2
4.->.-1,2
8.->.-1,3
按照上述顺序,使用函数conv对列表进行排序。
排序列表-> 9,3,6,12,4,8
发布于 2020-11-25 14:09:22
key=conv意味着列表l是使用conv函数排序的。每个元素都作为输入发送到conv。然后,根据来自conv的输出列表最终对列表进行排序。
https://stackoverflow.com/questions/65006094
复制相似问题