当前位置:   article > 正文

python列表逆序输出_Python 让列表逆序排列的 3 种方式

列表逆序输出

u=4079781818,3014471189&fm=173&app=25&f=JPEG?w=640&h=412&s=69E5AB468FB3AAD21AFCCD0B0000E0C3

让列表逆序排列是我们编程时常碰到的问题,比如现在有一些客户的姓名是将拼音的首字母按 A - Z 排列的,而你现在想找一个姓张( Z )的客户,你就有了将姓名逆序排列的需求了。而在 Python 中,将列表逆序有 3 种方式,下面将逐一讨论。

当然,这里说的 3 种方式指的是使用 Python 的内建模块的方法,不使用第三方的方法,包括你自己可能会写的循环等。

假设我们现在有这么一个列表

[1, 2, 3, 4, 5]

我们最终想得到的是

[5, 4, 3, 2, 1]

怎么办?

u=3849756828,603029825&fm=173&app=25&f=JPEG?w=640&h=349&s=85912C7C4EA198410CB4CD8B0000E081

第一种方式 list.reverse()

Python 的 list.reverse() 方法,会直接在原来的列表里面将元素进行逆序排列,不需要创建新的副本用于存储结果。

u=2716603802,1190853785&fm=173&app=25&f=JPEG?w=640&h=245&s=12D5616C5FECBB700CFEC5030200A0CB

就像你看到的这样,调用 list.reverse() 的返回值是 None ,它逆序的结果直接体现在原来的列表里面。

这种方式,有好处也有坏处。好处是节省内存使用,因为我们不需要重新申请空间来保存最后的结果。坏处是,我们修改了原来的数据,如果我们后面要使用原数据的话不方便。(虽说再倒序一次就行,但毕竟使用了多余的操作)。

从可读性来说,我喜欢这种方式。这个方法从字面意思上就告诉了我们所做的操作,即使是 Python 新手不知道这个方法,也能大致清楚这个完成了什么功能。

第二种方式 使用切片 [::-1]

Python 的列表有一个特性叫做切片,你可以将它看作是方括号( [ ] )使用的扩展。

简单的说下切片的使用

mylist[start:end:step]

上面的操作表示取 mylist 的第 start 个(列表索引从 0 开始)到第 end 个元素(不包括第 end 个),其中每隔 step 个(默认 1 )取一个。

u=3502218969,3107333413&fm=173&app=25&f=JPEG?w=640&h=163&s=92D7616C4FADBF705E57D0070200E0CB

当然,start 、end 和 step 都是可选的。

mylist[:] 会返回 mylist 的副本

u=4017380229,3428882555&fm=173&app=25&f=JPEG?w=640&h=100

加上 step 的话也正常工作

u=2784656194,727585741&fm=173&app=25&f=JPEG?w=640&h=100

而当 start 、end 和 step 为负时,表示从反方向遍历,看下面的例子就理解了

u=2920542505,2240969130&fm=173&app=25&f=JPEG?w=640&h=325&s=92DFE16C3AE0937A5E5684070200E0CB

所以 mylist[::-1] 就能达到逆序的目的

u=1647550332,192192301&fm=173&app=25&f=JPEG?w=640&h=102

相比于第一种方式,这种方式会另外创建副本来保存列表的所有元素,所以需要更多的内存空间。并且,由于使用了切片的特性,导致在可读性上也不如之前的方式。但是这种方式没有改变原来的列表,在某些情况下算是一种优势。

第三种方式 使用 reversed() 方法

reversed 方法会将列表逆序的结果存储到迭代器里面,这种方式不会改变原来的列表,也不会创建原来列表的完整副本,只会多出迭代器对象所占的空间,相对来说也比较高效。(不明白迭代器原理的同学可以看下我之前的一篇文章 一步一步带你理解 Python 迭代器)

如果要访问所有的元素,循环就好,就像这样

u=2550706319,297457175&fm=173&app=25&f=JPEG?w=640&h=365&s=12B5716C1BE49B6C1AD6B4030200A0CB

看了例子后,我们发现,这个的可读性也好,毕竟 reversed 字面意思已经体现出来了。

但是,如果我们想要一个列表呢,也简单

u=3747730127,2090329617&fm=173&app=25&f=JPEG?w=639&h=166&s=92D7616CCBE8BF72587694090200E0CB

虽然这能达到目的,但是如果我们最终想要得到列表的话,这里使用 reversed 方法就没有意义了,因为这里我们又创建了 mylist 的副本。针对这种情况,用第一种或第二种方式更合适。

那么选择哪一种呢

1、显然,第一种是首选。毕竟高效、易读。如果不要保留原列表的数据,使用这种方式显然更有优势,否则选择后两种。

2、如果最后需要得到列表类型的结果,那么选第二种方式比较合理。否则,第三种方式更高效。

u=2232129858,1374686347&fm=173&app=25&f=JPEG?w=640&h=359&s=28829C5F56B0C5DE9E30AD0A0300B093

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号