sorted()/ reverse()之间的比较

时间:2014-07-18 11:07:10

标签: python python-3.x

我对在Python的创建中做出一些选择的想法有一些疑问。

首先是2个内置方法sorted()reversed(),为什么前者返回一个列表而后者返回一个迭代器?为什么要做出这样的改变呢?

2 个答案:

答案 0 :(得分:4)

sorted()reversed()完全不同。

reversed()可以非常有效地为您提供序列的反转。像liststrrange这样的类型实现了__reversed__ method,用于反向访问相同的序列(只需将索引转换为从末尾开始计数而不是开始);如果未实施,则使用__getitem____len__方法,reversed()进行转换。

重要的是,元素的相对顺序不会改变,只有你迭代它的方向是不同的。在这方面,reversed()iter()的倒数,但仅适用于具有固定长度的类型。

另一方面,排序总是具有来构建新列表,因为必须更改元素的相对顺序。您不再只是逐个获取元素而不必知道序列中的其他元素。

答案 1 :(得分:1)

为了对列表进行排序,我们需要获取所有元素并按正确的顺序排列。因此,传递给sorted的任何迭代类型都将转换为列表。一旦创建了列表,返回迭代器就没有优势。

reversed不同;如果你把它传给一个列表,就没有必要创建一个回到前面的新列表,返回一个能够按需从原始列表中访问元素的生成器会更有效。 / p>

请注意reversed不对序列中的值进行任何排序,它会反转元素出现的顺序。