我对在Python的创建中做出一些选择的想法有一些疑问。
首先是2个内置方法sorted()
和reversed()
,为什么前者返回一个列表而后者返回一个迭代器?为什么要做出这样的改变呢?
答案 0 :(得分:4)
sorted()
和reversed()
完全不同。
reversed()
可以非常有效地为您提供序列的反转。像list
,str
和range
这样的类型实现了__reversed__
method,用于反向访问相同的序列(只需将索引转换为从末尾开始计数而不是开始);如果未实施,则使用__getitem__
和__len__
方法,reversed()
进行转换。
重要的是,元素的相对顺序不会改变,只有你迭代它的方向是不同的。在这方面,reversed()
是iter()
的倒数,但仅适用于具有固定长度的类型。
另一方面,排序总是具有来构建新列表,因为必须更改元素的相对顺序。您不再只是逐个获取元素而不必知道序列中的其他元素。
答案 1 :(得分:1)
为了对列表进行排序,我们需要获取所有元素并按正确的顺序排列。因此,传递给sorted
的任何迭代类型都将转换为列表。一旦创建了列表,返回迭代器就没有优势。
reversed
不同;如果你把它传给一个列表,就没有必要创建一个回到前面的新列表,返回一个能够按需从原始列表中访问元素的生成器会更有效。 / p>
请注意reversed
不对序列中的值进行任何排序,它会反转元素出现的顺序。