目录
一、列表的基本概念
列表由一系列按特定顺序排列的元素组成。Python的列表用[](方括号)表示,元素由逗号分隔。元素可以是字符,也可以是数字,或者其他任何东西。
且看示例:
嗯,像图中mixed这种乱炖形式也是可以的。
列表是有序的集合,因此可以通过索引去访问元素,语法为name[index]
和许多编程语言一样,Python的索引也是从0开始的。
但在获取列表元素时,也要注意索引不能超出列表长度,否则会报错:
Python还提供了另外一种获取列表元素的方式:负数索引,表示列表中倒数第几个元素。
负数索引也不能超出列表长度。这里不赘述了,可以自己尝试一下。
无论是正数索引还是负数索引,在列表为空时都存在索引越界错误,值得注意。
二、列表之增删改
1、修改列表元素
指定列表名及待修改元素的索引位置即可:
2、添加列表元素
可以通过append()方法在列表末尾添加元素:
也可以通过insert()方法在列表的任意位置添加新元素:
可以看到,当我们试图在超出列表长度的索引位置添加元素时,依然可行,Python将其自动排列到了列表的末尾处。
联想一下前边,超索引获取元素时会报错,而超索引添加元素则没问题。这意思就是,我没有的你别要,但你可以给我😎。
3、删除列表元素
可以使用del()语句,删除指定位置的列表元素:
注意:一旦元素被删除,就无法再访问了 ;如果索引值超过列表长度,删除会报错。
也可以使用pop()方法删除列表末尾的元素(即弹栈):
你会发现,我们是可以捕获到被pop出去的元素(Jeep)的。至于怎么处理它,就看你的心情了~啊不对,是看你的业务 。
捕获的前提是,你要用一个变量去接住它,否则它就摔死了,死无全尸的那种。所谓一时pop一时爽,一直pop弹光光!
可以通过pop(index)来删除列表中任意位置的元素:
此处,index也是不可以超过列表长度的。
可以通过remove()方法删除指定内容的元素,而不必关心其索引位置:
注意:remove()方法只能删除列表中第一个指定的值。如果要删除的值在列表中有多个,需要使用循环。这里暂不做介绍(其实是我还没有学到~)
三、组织列表
一些可以改变列表中元素排列顺序的方法。
1、用sort()方法对列表永久排序。
sort()将元素按照字母顺序排列,大小写对排序结果没有影响。永久排序,表示排序后无法复原到原来的顺序了。
也可以使元素按照字母顺序反向排列,只需给sort()方法传递一个参数 reverse=True 即可。注意True首字母大写。
2、用sorted()方法对列表临时排序
如果想保留元素的原始顺序,同时还想通过某种特定的顺序来展示,可以使用sorted()方法。
同样的,sorted()方法也可以通过参数reverse=True达成反向排列。
但是——sorted()方法是关心大小写的。我们可以通过代码片段来了解一下:
结果表明,首字母大写的元素和首字母小写的元素,是分开排序的。
3、用reverse()方法反转列表的元素顺序
reverse()方法只针对列表元素的原始顺序,与字母顺序无关。
(注意图片里的红字说明)
4、用len()方法获取列表长度
除了len()方法,也可以通过列表的自有属性__len__()来获取长度,结果是一样的。
四、操作列表
1、遍历列表
Python中的for循环来了。不同于java的大括号,Python的循环体没有指定起止符号,而是通过缩进来判断一行代码是否在循环体中。for语句之后,所有的循环体语句都要缩进,直到碰到不缩进的行,系统判定循环体结束。
我们先看看代码示例:
这张图除了解释for循环的运行方式,还有两点值得注意的地方。其一,是for语句末尾的冒号,是不可缺少的,否则会报错;其二,是for循环结束之后,仍然可以获取到最后一次循环的内容。这与java大相径庭。
相较于java的for循环,我个人不太喜欢Python的循环表达方式,万一循环内容很长、代码行数很多,不排除有缩进处理错误的可能,其结果是:要么循环在不该结束的地方提前结束,要么在该结束的地方没有结束,导致输出了一些本不该循环输出的内容(或者其他操作)。虽然,有经验者可以很轻松的避免这个问题,但是~谁敢100%保证呢?希望是我作为初学者杞人忧天了。
2、创建数值列表
Python中可以使用range()函数生成数字集合。range()函数有两种参数传递方式:一种是指定起始值,生成从第一个参数开始,到第二个参数停止的数值列表,遵循左闭右开原则;另一种是只传入一个参数,生成从0开始到入参停止的数值列表,同样遵循左闭右开。如图:
这里需要注意,入参需为整数,不可以是浮点数。此外,如果传入了负数,程序不会报错,但结果是空的,这样没有意义。
进一步的,我们可以使用list()函数将range()的结果直接转换为列表:
使用range()函数时,还可以指定步长(间隔)。为此,需要给list()函数指定第3个参数,Python将根据这个参数来生成列表内容。如下图所示:
在上图中,range()函数从2开始,每次+3,直到达到或超过22为止。
下面,我们演示一个小例子:创建一个由1~10的平方组成的列表
这段代码是不是很简洁?Python通过列表解析可以只用一行代码就完成上面的功能!下图:
要使用这种语法,首先声明一个列表(squares_2),然后在方括号中定义一个表达式(value**2),用于生成列表值。 接下来编写一个for循环,用于给表达式提供值。
需要注意,这种场景下的for循环末尾没有冒号。
前后两段代码的运行结果是一致的。
我们还可以通过一些便捷的函数对列表进行一些统计计算:
最小值、最大值、求和,都是一句话搞定! 虽然java也可以这么用,但那些函数是需要自己编写的- -。总体感受就是便捷、强大,分分钟好评!
3、使用列表的一部分——切片
列表的部分元素,Python称之为切片。要创建切片,可指定要使用的第一个元素和最后一个元素的索引。和range()函数一样遵循左闭右开原则。如图:
获取切片时,索引是可以摆很多pose的😈:
还可在获取切片时输入第三个参数,表示在指定范围内每隔多少元素取一个:
遍历切片:for循环中使用切片,和遍历列表是一样的
上图示例可以看到,取切片时终止index可以越界,这时系统默认取到列表末尾。
这不是什么重要知识点,只是我开了脑洞后的一个小实验,不清楚有没有实用价值。
复制列表
要复制列表,需要创建一个包含所有列表元素的切片。这时,原列表和切片可以各自进行一些操作而互不干扰。复制的方法,就是[:]
如果不使用切片,进行列表复制得到的结果可能不是我们想要的:
这样复制,是真的复(行)制(不)了(通)...想要的不想要的都一式两份,惊不惊喜?
这是因为将my_games(而不是my_games的副本)赋给了other_games,此时Python将两个变量指向同一个列表。这种情况下,不管你对哪个变量进行操作,结果都会同时反馈到另一边去。图中相同的输出结果证明了这一点。
4、元组
元组就是不可变的列表。
元组和列表非常相近,只不过列表用中括号[]表示,而元组用小括号()表示。定义元组之后,就可以通过索引来访问元素。
我们说元组是不可变的列表,意思是无法通过修改元素来改变元组,如图:
那么,我的好奇心上来了怎么办?强迫症犯了怎么办?就想改一改......办法还是有的😄
不能修改元组的元素,但是可以直接改元组!重新给它赋值就OK了!
俗话说,一根筷子被折断,十根筷子抱成团。怎么到了元组这里,一根筷子折不断,十根筷子被团灭了呢?
元组也可以进行遍历操作,方式和列表是一样的,就不举例了,偷个懒。
(完)