一 认识列表
1.1 “列表” 是什么?
【列表】由一系列按特定顺序排列的元素组成。在Python中,用方括号 [ ] 表示列表,用逗号分隔其中的元素,其中的元素之间可以没有任何关系,可以将任何东西(数字、字母、字符等)加入列表。列表通常包含多个元素,因此一般给列表指定一个表示复数的名称(如 letters、digits、names)。
1.2 “列表” 长啥样?
下面是一个简单的示例,其中包含几种自行车:
bicycles=['trek','cannondale','redline','specialized']
如果让Python将列表打印出来,Python将打印列表的内部表示,包括方括号:
['trek','cannondale','redline','specialized']
1.3 访问列表元素
列表是有序集合,这里的序指的是元素在列表中所占位置的排序,因此要访问列表的元素,只需将该元素的位置(索引❶)告诉Python即可。例如,下面的代码从列表bicycles中提取第一款自行车:
bicycles= ['trek','cannondale','redline','specialized']
print(bicycles[0])
当请求获取列表元素时,只返回该元素,而不包括方括号:
trek
❶需要注意,索引从0而不是1开始。在Python中,第一个列表元素的索引为0,而不是1。同时,Python为访问最后一个列表元素提供了一种特殊语法,通过将索引指定为-1,可让Python返回最后一个列表元素。
二 对列表元素进行操作
2.1 修改列表元素
要修改列表元素,可指定列表名和要修改的元素的索引,再指定该索引位置上的新值。例如,将names列表中的第2个元素Merry改为Lily:
names=['Bob','Merry','Alice','Sharly']
names[1]='Lily'
2.2 在列表中添加元素
append()方法
使用append()方法将元素追加到列表末尾,而不影响列表中的其他元素。
names=['Bob','Merry','Alice','Sharly']
names.append('Lily')
insert()方法
使用insert()方法可以在列表中的任意位置添加新元素,使用时需要指定新元素的位置和值。
names=['Bob','Merry','Alice','Sharly']
names.insert(0,'Lily')
2.3 在列表中删除元素
del 语句
使用del语句可以删除列表中任意位置的元素,只要知道其索引即可。
names=['Bob','Merry','Alice','Sharly']
del names[0]
pop()方法
使用pop()方法可以删除列表中任意位置的元素(只要知道指定要删除的元素的索引即可,若不添加索引值则认定删除列表末尾元素),同时弹出这个被删除的元素,让你能够继续使用它。
names=['Bob','Merry','Alice','Sharly']
popped_names=names.pop(0)
print(names)
print(f"{popped_names} was deleted")
如果不确定使用del语句还是pop()方法,下面是一个简单的判断标准:如果要从列表中删除一个元素,且不再以任何方式使用它,就使用del语句;如果要在删除元素后继续使用它,就使用pop()方法。
remove()方法
有时候,不知道要从列表中删除的元素在哪个位置,只知道要删除的元素的值,可使用remove()方法。
names=['Bob','Merry','Alice','Sharly']
names.remove('Bob')
remove()方法只删除第一个指定的值。如果要删除的值在列表中出现多次,就需要使用循环,具体方法在之后的博客中谈到。
2.4 对列表中的元素进行排序
sort()方法
sort()方法可以使列表中元素按照字母顺序排列,永久地修改列表元素的排列顺序。
names=['Bob','Merry','Alice','Sharly']
names.sort()
sorted()函数
使用sorted()函数可对列表元素按照字母顺序进行临时排序,在调用sorted()函数后,原列表中元素的排列顺序没变(这是sorted()函数与sort()方法的区别)。
names=['Bob','Merry','Alice','Sharly']
print(sorted(nmes))
print(names)
reverse()方法
使用reverse()方法可以反转❷列表元素的排列顺序。
names=['Bob','Merry','Alice','Sharly']
names.reverse()
print(names)
❷请注意,reverse()方法不是按与字母顺序相反的顺序排列列表元素,只是反转列表元素的排列顺序。
2.5 确定列表的长度
len()函数
使用len()函数可以快速获得列表的长度,即列表中包含多少个元素。
names=['Bob','Merry','Alice','Sharly']
print(len(names))
三 对列表进行操作
3.1 遍历整个列表
使用for循环可以遍历整个列表:
names=['Bob','Merry','Alice','Sharly']
for name in names:
print(name)
执行代码后,输出如下:
Bob
Merry
Alice
Sharly
3.2 创建数值列表
创建数值列表需要用到list()函数和range()函数,首先介绍range()函数。
使用range()函数可以生成一系列的数,例如:
for i in range(1,5):
print(i)
--------------------------------------------------------#以下是打印结果
1
2
3
4
range()函数让Python从指定的第一个数值开始数,并在到达指定的第二个数值时停止,因此输出不包含第二个值。在使用range()函数时,还可以指定步长,如下:
for i in range(1,10,2):
print(i)
--------------------------------------#以下是最终打印结果
1
3
5
7
9
在这个示例中,range()函数从1开始数,然后不断地加2,直到达到或者超过终值(10)。
list()函数可以将range()的结果直接转换为列表。如下:
numbers=list(range(1,5))
print(numbers)
-----------------------------------#以下是最终打印结果
[1,2,3,4]
3.3 列表推导式
列表推导式将for循环和创建新元素的代码合并为一行:
squares=[value**2 for value in range(1,5)]
print(squares)
-----------------------------------#以下是最终打印结果
[1,4,9,16]
首先需要指定一个描述性的列表名,本例中为squares,然后指定一个左方括号,并定义一个表达式,用于生成要存储到列表中的值。在本例中,表达式为value**2。接下来,编写一个for循环,用于给表达式提供值,再加上右方括号。请注意,这里的for语句末尾没有冒号。
3.4 切片
与遍历整个列表相对应,使用切片可以处理列表的部分元素。切片即是在列表名后加一个方括号,方括号中包含指定要使用的第一个元素和最后一个元素的索引,两个索引之间用冒号隔开,如下:
names=['Bob','Merry','Alice','Sharly']
print(names[1:3])
-------------------------------------#以下是最终打印结果
['Merry','Alice','Sharly']
如果没有指定第一个索引,Python将自动从列表开头开始;如果没有指定第二个索引,Python将自动遍历至最后一个元素。
3.5 复制列表
要复制列表,需要创建一个包含原列表所有元素的切片,如下:
my_foods=['pizza','falafel','carrot cake']
friend_foods=my_foods[:]
这样就创建了两个名称分别为my_foods和friend_foods的独立列表,对其中一个列表进行增删元素操作不会影响另外一个列表。而下面这种方式是错误的(这种语法实际上是将新变量friend_foods关联到已与my_foods相关联的列表,因此这两个变量指向同一个列表):
my_foods=['pizza','falafel','carrot cake']
friend_foods=my_foods
四 元组
元组与列表很像,只是列表中的元素可以更改,而元组中的元素不可更改。列表用方括号表示,而元组用圆括号表示。如下,names就是一个元组:
names=('Bob','Lily','Alice')
虽然元组中的元素不可更改,但是可以给指向元组的变量重新指定另一个元组:
names=('Bob','Lily','Alice')
names=('Tiantian','Youyou','Haoxin')
五 说明
本文是笔者在学习Python的列表相关章节过程中所作的内容梳理,既是为了方便自己复习,也希望能够帮助到其他正在学习Python的朋友。笔者学习的书籍是由Eric Matthes著、袁国忠译、陶俊杰审、人民邮电出版社出版的《Python编程 从入门到实践》,本文使用的语言和很多例子都来自该书。作为一个编程小白,笔者认为这本书对初学者非常友好,是一本很经典的书;同时,作为一个编程小白,笔者知识水平有限,文中不免会出现部分描述错误。如果有感到困惑的地方,可能就是本文描述不当所致,请移步至其他优秀的博文中寻求解答。