2015-09-05 41 views
1
file_list = os.listdir(os.getcwd) 
files = file_list.sort() 

如果我有一个基于目录如上面的清单列表,为什么它有时如果使用files.sort()函数,但预期排序返回返回NoneType使用排序(文件)功能?Python的排序()VS的.sort()的目录列表

+0

您可以发布一些您正在测试的示例目录列表吗? – stef

回答

7

list.sort()确实排序,而sorted(list)返回排序列表的副本。 这意味着.sort()将返回None,因为它没有任何回报,因此默认None。如果您想保留原始列表,则使用sorted()是有用的,因为.sort()销毁原始订单。

>>> my_list = [3, 1, 2] 
>>> sorted_list = sorted(my_list) 
>>> sorted_list 
[1, 2, 3] 
>>> my_list 
[3, 1, 2] 
>>> print my_list.sort() 
None 
>>> my_list 
[1, 2, 3] 
+2

我不太了解评论。如果你确实想使用'.sort()'而不用分配它,并且调用'file_list'后只是调用'file_list.sort()',那么'sort()'将总是*返回'None' –

+0

@conma293。因为它将被排序 –

+0

但是,如果我调用files = file_list.sort()不会从本质上调用排序到位列表的副本并将其分配给文件? – conma293

2

list.sort()list的方法和对列表进行排序,这是就地呼吁,不返回任何东西。

sorted(collection)需要任何可迭代的(它可以是一个列表,集合,元组,甚至是一个generator),并返回一个列表,其中包含按排序顺序排列的所有项目。

由于sorted(collection)适用于任何可迭代,并返回一个列表链接的方法调用或当它是非常有用的,当你不能使用list.sort(),例如在字典中遍历项目时(这是一个元组)为:

dct = { "c": 1, "b": 3, "a": 7 } 
for key, value in sorted(dct.items()): 
    print("{} = {}".format(key, value)) 

在你的情况下,它并不重要,但我会用

file_list = sorted(os.listdir(os.getcwd)) 

去纯粹是出于个人喜好的(它占用更少的空间)。