Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 这个键在排序中是如何从数组中的元素中获得最大数量的_Python_Sorting - Fatal编程技术网

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",
]