【问题标题】:python beginner:What goes wrong with 'print mystr.split(',').sort(reverse=True)' [duplicate]python初学者:'print mystr.split(',').sort(reverse = True)'出了什么问题[重复]
【发布时间】:2015-11-22 14:46:31
【问题描述】:

我尝试从一个字符串中排序一个数字序列:

在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

为什么会这样?希望得到您的帮助!

【问题讨论】:

    标签: python


    【解决方案1】:

    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']
    

    如果要返回排序列表,请改用sorted()函数

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

    旁注:sortsorted 可以引发对就地排序算法效率的详细讨论。由于sort 函数不会创建新列表,因此它将比sorted 更节省内存。 sort 也可以处理更大的列表。

    【讨论】:

    • 或许可以指出.sort()sorted() 更有效,尽管对于小型列表和/或不频繁的排序无需担心。
    【解决方案2】:

    要按照您的意愿将其链接在一起,您可以这样做:

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

    【讨论】:

      【解决方案3】:

      这将在一个链中完成您想要的操作:

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

      【讨论】:

        【解决方案4】:

        正如其他人所提到的,sorted() 与 sort() 返回列表与就地修改,这是一个阅读链接:

        https://wiki.python.org/moin/HowTo/Sorting

        print sorted(mystr.split(','), reverse=True)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-30
          • 1970-01-01
          • 2019-06-18
          • 2011-08-17
          • 1970-01-01
          相关资源
          最近更新 更多