str类型排序的问题
>>> b = ["h","e","l","l","o","hello","hell","hel","he"]>>> b.sort()
>>> b
['e', 'h', 'he', 'hel', 'hell', 'hello', 'l', 'l', 'o']
>>> b.sort(reverse=True)
>>> b
['o', 'l', 'l', 'hello', 'hell', 'hel', 'he', 'h', 'e']
各位大神str类排序是依据是啥
Microsoft Windows [版本 10.0.17763.805]
(c) 2018 Microsoft Corporation。保留所有权利。
C:\Users\jx>python
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul8 2019, 20:34:20) on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> a = ["1","2","3","4"]
>>> a.extend(["hello","python",None]) )
>>> a
['4', '3', '2', '1', 'hello', 'python', None]
>>> a.sort(reverse=True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'str' and 'NoneType'
>>> a.remove(None)
>>> a
['4', '3', '2', '1', 'hello', 'python']
>>> a.sort(reverse=True)
>>> a
['python', 'hello', '4', '3', '2', '1']
另外需要各位指教的是 为什么sort方法存在 None值时会出现错误 使用reverse()则可以执行呢? 本帖最后由 jackz007 于 2019-11-17 01:17 编辑
sort() 方法排序依据的是字符串中字符的 ASCII 编码顺序或元素的数值大小,一般是按从小到大的顺序排列。对于字符串元素,首先比较首字符,如果编码相同,则继续比较后续字符,直至决出顺序为止。
sort() 方法需要访问并比较每一个列表元素,而 None 无值,不是一个正常的列表元素,导致比较排序操作无法正常进行。所以,列表中不可以含有 None;reverse() 方法不需要访问元素,只要把列表的元素顺序反过来就可以了,所以,reverse() 方法可以处理带有 None 元素的列表。 jackz007 发表于 2019-11-17 01:02
sort() 方法排序依据的是字符串中字符的 ASCII 编码顺序或元素的数值大小,一般是按从小到大的顺序排 ...
reverse()是直接读取索引值进行操作的吗?它对索引值标签上的数据是不查询的? 海月清辉 发表于 2019-11-17 01:28
reverse()是直接读取索引值进行操作的吗?它对索引值标签上的数据是不查询的?
具体操作方法不是很清楚,但不会访问元素本身是可以肯定的,因为,完全没有必要。 jackz007 发表于 2019-11-17 01:43
具体操作方法不是很清楚,但不会访问元素本身是可以肯定的,因为,完全没有必要。
我刚实验了 reverse()颠倒索引值并且进行ASC编码大小比较
sort()必须保持元素类型一致也就是说str + num类型会报错但是 int + float类型是可以进行比较的 jackz007 发表于 2019-11-17 01:43
具体操作方法不是很清楚,但不会访问元素本身是可以肯定的,因为,完全没有必要。
大神,我这样子算是学习吗 我总感觉我在钻牛角尖一样的 {:5_109:} 海月清辉 发表于 2019-11-17 01:58
我刚实验了 reverse()颠倒索引值并且进行ASC编码大小比较
sort()必须保持元素类型一致也就是 ...
你是如何知道 reverse() 要比较 ASCII 编码的? jackz007 发表于 2019-11-17 02:01
你是如何知道 reverse() 要比较 ASCII 编码的?
我搞混淆了 教程上并没有说比较了大小无论是reverse()还是reversed函数都只执行点到索引值,并不进行比较~~~~谢谢您赐教!{:5_101:}
页:
[1]