|
发表于 2018-4-25 09:59:51
|
显示全部楼层
本帖最后由 ABC23 于 2018-4-25 10:03 编辑
split()方法默认separator为空格,可以不显式指出。
==============================
0 nul 1 soh 2 stx 3 etx 4 eot 5 enq 6 ack 7 bel
8 bs 9 ht 10 nl 11 vt 12 np 13 cr 14 so 15 si
16 dle 17 dc1 18 dc2 19 dc3 20 dc4 21 nak 22 syn 23 etb
24 can 25 em 26 sub 27 esc 28 fs 29 gs 30 rs 31 us
32 sp 33 ! 34 " 35 # 36 $ 37 % 38 & 39 '
40 ( 41 ) 42 * 43 + 44 , 45 - 46 . 47 /
48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7
56 8 57 9 58 : 59 ; 60 < 61 = 62 > 63 ?
64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G
72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O
80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W
88 X 89 Y 90 Z 91 [ 92 \ 93 ] 94 ^ 95 _
96 ` 97 a 98 b 99 c 100 d 101 e 102 f 103 g
104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o
112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w
120 x 121 y 122 z 123 { 124 | 125 } 126 ~ 127 del
这是一张系统生成的ASCII编码表,通过man ascii查看
=================================================
'100' => 49 48 48
'60' => 54 48
'30' => 51 48
'99' => 57 57
sort()、sorted()函数对字符串排序,实际比较的是他们的ASCII值,先看位数,位数相同比较每位的值。小的在前面。
因为100转换为ASCII最高位是49,最小,所以在最前面。
==================================
要比较的是int类型,应该显性进行转换:
➜ desktop cat pp.py
#!/usr/bin/env python3
lyst = []
with open('demo.txt') as f:
line = f.readline()
while line:
lyst.append(line.strip())
line = f.readline()
print(lyst)
lyst.sort(key=lambda x: int(x.split()[1]))
print(lyst)
这样就好了。
['杨颖 100', '样大海 60', '王二狗 30', '李铁蛋 99']
['王二狗 30', '样大海 60', '李铁蛋 99', '杨颖 100']
=================================
测试文件:
➜ desktop cat demo.txt
杨颖 100
样大海 60
王二狗 30
李铁蛋 99 |
|