【问题标题】:Why can't I sort a list right after I make it? [duplicate]为什么我不能在创建列表后立即对列表进行排序? [复制]
【发布时间】:2013-08-02 21:40:42
【问题描述】:

我有一个集合,我想将其放入排序列表中。我跑:

sorted_list=list(my_set).sort()

但这会返回none,即使list(my_set)my_set 都是非空的。另一方面:

sorted_list=list(my_set)
sorted_list.sort()

工作得很好。

为什么会这样? python不允许对构造函数直接返回的对象调用方法吗?

【问题讨论】:

  • a = my_list.append(b) 不像人们想象的那样工作的原因相同。
  • 可以在创建列表后立即对其进行排序。您的代码已经做到了这一点。只是sorted_list 是对sort 返回的值的引用,即None,所以你最终不会得到任何对实际排序列表的引用。但它仍然存在(或者确实存在,在 GC 清理它之前你没有保留对它的引用)。

标签: python list python-3.x


【解决方案1】:

.sort() 对列表进行就地排序并返回None。你需要在这里使用sorted()函数。

>>> a = [3, 2, 1]
>>> print a.sort()
None
>>> a
[1, 2, 3]
>>> sorted(a)
[1, 2, 3]

【讨论】:

    【解决方案2】:

    很简单:

    • sort() 进行就地排序并返回 None
    • sorted() 返回排序后的副本

    这是来自How To/Sorting - Python Wiki的引述:

    Python 列表有一个内置的 sort() 方法可以修改列表 就地和 sorted() 内置函数,用于构建新的 sorted 来自可迭代的列表。

    【讨论】:

      【解决方案3】:

      你正在寻找这个:

      sorted_list = sorted(list(my_set))
      

      甚至更简单:

      sorted_list = sorted(my_set)
      

      sort() 将列表排序并返回None,这就是将存储在sorted_list 中的内容。这不是我们所期望的。

      另一方面,sorted() 返回一个新的排序列表,其中包含作为参数接收的元素(它可以是列表或集合:实际上,任何可迭代的),这就是分配给 sorted_list 的内容- 正是我们想要的!

      【讨论】:

        【解决方案4】:

        因为sort 方法就地更改了列表。你想要的是sorted 函数,它返回一个排序列表:

        sorted_list = sorted(my_set)
        

        sorted() 函数不会触及它的参数,因为它会复制它。另一方面,sort方法直接改变了原来的列表,返回None

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-14
          • 1970-01-01
          • 1970-01-01
          • 2020-02-16
          相关资源
          最近更新 更多