Python 这个键在排序中是如何从数组中的元素中获得最大数量的
我有这个代码,但我无法理解它是如何工作的。它是以这样一种方式将数字排列在一个数组中:数字的串联产生最大的数字。我只是不明白那把钥匙是怎么用的Python 这个键在排序中是如何从数组中的元素中获得最大数量的,python,sorting,Python,Sorting,我有这个代码,但我无法理解它是如何工作的。它是以这样一种方式将数字排列在一个数组中:数字的串联产生最大的数字。我只是不明白那把钥匙是怎么用的 def fucn(x): print(str(x) * 10) return str(x) * 10 arr = [23, 45, 65, 66, 7, 4, 67] Result = sorted(arr, key=fucn, reverse=True) print('\n' + ''.join([str(i) for i in Re
def fucn(x):
print(str(x) * 10)
return str(x) * 10
arr = [23, 45, 65, 66, 7, 4, 67]
Result = sorted(arr, key=fucn, reverse=True)
print('\n' + ''.join([str(i) for i in Result]))
[
"23232323232323232323",
"45454545454545454545",
"65656565656565656565",
"66666666666666666666",
"7777777777",
"4444444444",
"67676767676767676767",
]
当列表按字母顺序排序时,
*10
不起任何作用(通过回调返回字符串值str(x)
)。这意味着即使是唯一的字符串7
也在6767
之前
[
"23232323232323232323",
"45454545454545454545",
"65656565656565656565",
"66666666666666666666",
"7777777777",
"4444444444",
"67676767676767676767",
]
如果删除该字符串转换,只执行返回x*10
,则最大值在乘以10后仍将保持最大值,因此打印值将以67开始
[
"23232323232323232323",
"45454545454545454545",
"65656565656565656565",
"66666666666666666666",
"7777777777",
"4444444444",
"67676767676767676767",
]
编辑:关于您在另一个答案中的评论,在计算机语言中按字母顺序排序意味着按ASCII表中的当前字符位置排序(我们暂时忘记unicode或其他字符集):
[
"23232323232323232323",
"45454545454545454545",
"65656565656565656565",
"66666666666666666666",
"7777777777",
"4444444444",
"67676767676767676767",
]
[
"23232323232323232323",
"45454545454545454545",
"65656565656565656565",
"66666666666666666666",
"7777777777",
"4444444444",
"67676767676767676767",
]
Dec=十进制值
字符
“5”的int值为53
如果我们写'5'-'0',它的计算结果是53-48,或整数5
如果我们写字符c='B'+32;然后c存储“b”
Dec Char Dec Char Dec Char Dec Char
--------- --------- --------- ----------
0 NUL(null)32空格64@96`
1 SOH(航向开始)33!65 A 97 A
2 STX(文本开头)34“66 B 98 B
3 ETX(文本结尾)35#67 C 99 C
4 EOT(变速箱末端)36$68 D 100 D
5 ENQ(查询)37%69 E 101 E
6确认(确认)38楼和70楼102楼
7贝尔(贝尔)39'71克103克
8 BS(退格)40(72小时104小时
9凸耳(水平凸耳)41)73 I 105 I
10左前(NL管线进料,新管线)42*74 J 106 J
11 VT(垂直标签)43+75 K 107 K
12 FF(NP表格输入,新页)44,76升108升
13 CR(回车)45-77米109米
14 SO(移出)46.78 N 110 N
15 SI(移入)47/79 O 111 O
16 DLE(数据链路转义)48 0 80 P 112 P
17 DC1(设备控制1)49 1 81 Q 113 Q
18 DC2(设备控制2)50 2 82 R 114 R
19 DC3(设备控制3)51 3 83 S 115 S
20 DC4(设备控制4)52 4 84 T 116 T
21 NAK(否定应答)53 5 85 U 117 U
22同步(同步怠速)54 6 86 V 118 V
23 ETB(变速箱端部)55 7 87 W 119 W
24 CAN(取消)56 8 88 X 120 X
25 EM(中端)57 9 89 Y 121 Y
26子(替换)58:90 Z 122 Z
27 ESC(逃生)59;91[123{
28 FS(文件分隔符)60<92\124|
29 GS(群分隔符)61=93]125}
30 RS(记录分隔符)62>94^126~
31美国(单元分离器)63?95 127 DEL
因此,如果您有两个字符串“67”和“7”,那么Python检查第一个字符,发现55大于54,因此将字符串“7”放在“67”之前(倒序==降序)。为其设置一个用作排序比较键的函数的键。
[
"23232323232323232323",
"45454545454545454545",
"65656565656565656565",
"66666666666666666666",
"7777777777",
"4444444444",
"67676767676767676767",
]
如果arr=[23,45,65,66,7,4,67]
传递给您的func
如下:
[
"23232323232323232323",
"45454545454545454545",
"65656565656565656565",
"66666666666666666666",
"7777777777",
"4444444444",
"67676767676767676767",
]
试一试
[
"23232323232323232323",
"45454545454545454545",
"65656565656565656565",
"66666666666666666666",
"7777777777",
"4444444444",
"67676767676767676767",
]
In [1]: sorted(str_list)
Out[1]:
['23232323232323232323',
'4444444444',
'45454545454545454545',
'65656565656565656565',
'66666666666666666666',
'67676767676767676767',
'7777777777']
In [2]: sorted(str_list, reverse=True)
Out[2]:
['7777777777',
'67676767676767676767',
'66666666666666666666',
'65656565656565656565',
'45454545454545454545',
'4444444444',
'23232323232323232323']
所以“777777”在您的列表中是7
arr
,因为
[
"23232323232323232323",
"45454545454545454545",
"65656565656565656565",
"66666666666666666666",
"7777777777",
"4444444444",
"67676767676767676767",
]
In [3]: str(7) * 10
Out[3]: '7777777777'
etc无论如何,请用它来理解它是如何工作的。你能解释一下“6767”为什么比“7777”小吗?我对这一部分感到困惑?谢谢你的解释。字符串是按字典顺序排列的。字符
'7'
在字典顺序上比字符'6'
晚。根据同样的推理,字符串'zero'
在词典编纂上比字符串'dayed'
晚,尽管'dayed'
是一个较长的字符串。
[
"23232323232323232323",
"45454545454545454545",
"65656565656565656565",
"66666666666666666666",
"7777777777",
"4444444444",
"67676767676767676767",
]