我尝试从字符串中对数字序列进行排序:
在python解释器中:
>>> mystr = '1,2,3,4,5'
>>> a = mystr.split(',')
>>> a
['1', '2', '3', '4', '5']
>>> a.sort(reverse=True)
>>> a
['5', '4', '3', '2', '1']
但是当我想缩短代码时,会出现问题:
>>> mystr
'1,2,3,4,5'
>>> print mystr.split(',').sort(reverse=True)
None
为什么会这样?希望得到你的帮助!
答案 0 :(得分:6)
sort()
没有返回新列表,而是对调用该函数的列表进行排序
更准确地说,sort()
会对列表进行就地排序
>>> a = mystr.split(',')
>>> a.sort(reverse=True) # Nothing is returned at this line
>>> a # But the list is sorted
['5', '4', '3', '2', '1']
如果要返回排序列表,请改用<{3}}函数
>>> sorted(mystr.split(','), reverse=True)
['5', '4', '3', '2', '1']
旁注: sort
vs sorted
可以详细讨论就地排序算法的效率。由于sort
函数不会创建新列表,因此它的内存效率将高于sorted
。此外sort
将能够处理更大的列表。
答案 1 :(得分:0)
要按照您的意愿将它链接在一起,您可以这样做:
mystr = '1,2,3,4,5'
print list(reversed(mystr.split(',')))
答案 2 :(得分:0)
正如其他人所提到的,sorted()vs sort()返回一个列表而不是就地修改,这里是一个读取它的链接:
https://wiki.python.org/moin/HowTo/Sorting
print sorted(mystr.split(','), reverse=True)