python初学者:';打印mystr.split(';,';).sort(reverse=True)';

python初学者:';打印mystr.split(';,';).sort(reverse=True)';,python,Python,我尝试从字符串中对数字序列进行排序: 在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'] 但当我想缩短

我尝试从字符串中对数字序列进行排序:

在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
为什么会这样?希望你的帮助

不会返回新列表,而是对调用函数的列表进行排序

更准确地说,
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']

若要返回已排序的列表,请改用函数

>>> sorted(mystr.split(','), reverse=True)
['5', '4', '3', '2', '1']


旁注:排序vs
排序
可以详细讨论就地排序算法的效率。由于
排序
函数不会创建新列表,因此它比
排序
函数的内存效率更高。另外,
排序
将能够处理较大的列表。

若要按您的意愿将其链接在一起,您可以执行以下操作:

mystr = '1,2,3,4,5'
print list(reversed(mystr.split(',')))

这将在一个链中实现您想要的功能:

sorted('1,2,3,4,5'.split(','))[::-1]  # ['5', '4', '3', '2', '1']

正如其他人所提到的,sorted()vs sort()要返回一个列表而不是就地修改,这里有一个链接来阅读它:


也许可以指出,
.sort()
sorted()
更有效,不过对于小列表和/或不频繁的排序,不必担心。
print sorted(mystr.split(','), reverse=True)