在列表和字符串中执行操作时的赋值差异

时间:2016-01-04 21:19:37

标签: python python-3.x

所以我开始使用Strings&列表(主要是基础)并注意到这个小事:

String1 = "    Lot of white space  "
String1 = String1.strip()
print(String1)

像魅力一样。

当我在LIST上尝试相同的事情(不同的操作)时。事情向南发展:

list1 = [1,5,8,4,2]
list1 = list1.sort()
print(list1)

输出 - 无

然而:

list1.sort()
print(list1)

提供所需的输出。

为什么会这样?

3 个答案:

答案 0 :(得分:1)

来自Python Docs

  

sort(*,key = None,reverse = None)此方法对列表进行排序,   仅使用<项目之间的比较。例外不会被抑制    - 如果任何比较操作失败,整个排序操作将失败(列表可能会处于部分修改状态)。

     

sort()接受两个只能通过关键字传递的参数   (仅限关键字参数):   ...   此方法修改了适当的序列以确保空间经济性   对大序列进行排序。提醒用户它是旁边的   效果,它不返回排序的序列(使用sorted()   显式请求新的排序列表实例。

这意味着,list1.sort()会对list1元素进行排序,而不会创建任何只返回None的新对象或列表。

>>> list1 = [1,5,8,4,2]
>>> is_None = list1.sort()
>>> is_None is None
True

list1.sort()相反,sorted()(内置方法)会返回list1的新排序列表:

  

sorted(iterable[, key][, reverse]) 从中返回新的已排序列表   可迭代的项目。

>>> list_sorted = sorted(list1)
>>> list_sorted
[1, 2, 4, 5, 8]
>>> type(list_sorted)
<type 'list'>

答案 1 :(得分:0)

sort()对列表进行排序,但会返回None。第一个代码段打印返回值sort()。第二个打印排序列表本身。

答案 2 :(得分:-1)

list.sort是一种就地方法。它修改列表,而不是返回新列表。其返回值为None,因此anything = some_list.sort()anything设置为None

来自文档:

  

此方法在对大序列进行排序时修改了空间经济性的顺序。要提醒用户它是由副作用操作的,它不会返回已排序的序列(使用sorted()显式请求新的已排序列表实例)。

如果您更喜欢这种语法(完全没问题),请使用sorted(...)代替list.sort

list1 = [1,5,8,4,2]
list1 = sorted(list1)