
列表
列表是什么
- 列表由一系列按特定顺序排列的元素组成,换言之列表是有序集合。
- 列表中的元素之间可以没有任何关系
- 鉴于列表包含多个元素,给列表指定表示复数的名称是个不错的实践。
- 列表使用方括号
[]
表示,并用逗号,
分隔其中的元素。
languages = ["python", "c", "shell"]
print(languages)
# ['python', 'c', 'shell']
访问列表元素
- 列表是有序集合,要访问列表中的元素只需要将指定元素的位置或索引即可。
languages = ["python", "c", "shell"]
print(languages, languages[0], languages[len(languages)-1])
# ['python', 'c', 'shell'] python shell
- 列表元素的索引是从0开始而不是1开始,访问最后一个元素可将索引指定为
-1
即可,依此类推。
languages = ["python", "c", "shell"]
print(languages, languages[0], languages[len(languages)-1], languages[-1])
# ['python', 'c', 'shell'] python shell shell
- 使用列表中的各个值,可以像使用变量一样使用列表中的各个值。
languages = ["python", "c", "shell"]
print("My first language was " + languages[0].title() + ".")
# My first language was Python.
修改列表元素
- 多数列表是将是动态的,列表创建后将随着程序的运行增减元素,列表的长度将不断变化。
- 修改列表元素与访问列表元素语法类似,指定列表名和要修改元素的索引后再为该元素赋新值。
languages = ["python", "c", "shell"]
languages[0] = "lua"
print(languages)
# ['lua', 'c', 'shell']
列表追加元素
-
append()
在列表末尾添加新元素,而不影响列表中其它所有元素。
languages = ["python", "c", "shell"]
languages[0] = "lua"
languages.append("c++")
print(languages)
# ['lua', 'c', 'shell', 'c++']
- 使用
append()
动态地创建列表
heroes = []
heroes.append("spider man")
heroes.append("iron man")
heroes.append("captain american")
heroes.append("black widow")
heroes.append("hulk")
print(heroes)
# ['spider man', 'iron man', 'captain american', 'black widow', 'hulk']
列表插入元素
-
insert()
可在列表的任何位置添加新元素,需指定新元素的索引和值,插入操作将列表中既有的每个元素都右移一个位置。
heroes = []
heroes.append("spider man")
heroes.append("iron man")
heroes.append("captain american")
heroes.append("black widow")
heroes.append("hulk")
print(heroes)
# ['spider man', 'iron man', 'captain american', 'black widow', 'hulk']
heroes.insert(0, "black panther")
print(heroes)
# ['black panther', 'spider man', 'iron man', 'captain american', 'black widow', 'hulk']
heroes.insert(-1, "cable")
print(heroes)
# ['black panther', 'spider man', 'iron man', 'captain american', 'black widow', 'cable', 'hulk']

列表删除元素
-
del
语句删除元素,需指定待删除的元素在列表中的位置。 - 使用
del
语句将值从列表中删除后,就无法再访问它了。
heroes = []
heroes.append("spider man")
heroes.append("iron man")
heroes.append("captain american")
heroes.append("black widow")
heroes.append("hulk")
print(heroes)
# ['spider man', 'iron man', 'captain american', 'black widow', 'hulk']
del heroes[0]
print(heroes)
# ['iron man', 'captain american', 'black widow', 'hulk']
del heroes[-1]
print(heroes)
# ['iron man', 'captain american', 'black widow']
- 使用
pop()
函数删除元素,并返回删除的元素的值。 -
pop()
函数可以删除列表末尾的元素,并能接着使用它。 - 列表像是一个栈,删除列表末尾的元素相当于弹出栈顶的元素。
heroes = []
heroes.append("spider man")
heroes.append("iron man")
heroes.append("captain american")
heroes.append("black widow")
heroes.append("hulk")
print(heroes)
# ['spider man', 'iron man', 'captain american', 'black widow', 'hulk']
hero = heroes.pop()
print(heroes, hero)
# ['spider man', 'iron man', 'captain american', 'black widow'] hulk
hero = heroes.pop(0)
print(heroes, hero)
# ['iron man', 'captain american', 'black widow'] spider man
hero = heroes.pop(-1)
print(heroes, hero)
# ['iron man', 'captain american'] black widow
根据值删除元素
若只知道需要删除元素的值而不知道元素在列表中的位置,可使用remove()
删除。
heroes = []
heroes.append("spider man")
heroes.append("iron man")
heroes.append("captain american")
heroes.append("black widow")
heroes.append("hulk")
print(heroes)
# ['spider man', 'iron man', 'captain american', 'black widow', 'hulk']
heroes.remove("iron man")
print(heroes)
# ['spider man', 'captain american', 'black widow', 'hulk']

组织列表
在创建列表时元素的排列顺序是无法预料的,但经常会需要以特定的顺序呈现。有时又希望保留列表元素最初的排列顺序,有时候又需要调整排列顺序。
列表排序
- 使用
sort()
对列表进行永久排序,默认为升序方式。 - 使用
sort(reverse=True)
改变排序方式为降序
heroes = []
heroes.append("spider man")
heroes.append("iron man")
heroes.append("captain american")
heroes.append("black widow")
heroes.append("hulk")
print(heroes)
# ['spider man', 'iron man', 'captain american', 'black widow', 'hulk']
heroes.sort()
print(heroes)
# ['black widow', 'captain american', 'hulk', 'iron man', 'spider man']
heroes.sort(reverse=True)
print(heroes)
# ['spider man', 'iron man', 'hulk', 'captain american', 'black widow']
- 使用
sorted()
对列表进行临时排序,保留列表元素原来的排列顺序,同时以特定的顺序呈现。 - 使用
sorted(list, reverse=True)
对列表临时降序排序
heroes = []
heroes.append("spider man")
heroes.append("iron man")
heroes.append("captain american")
heroes.append("black widow")
heroes.append("hulk")
print(heroes)
# ['spider man', 'iron man', 'captain american', 'black widow', 'hulk']
list = sorted(heroes)
print(heroes, list)
# ['spider man', 'iron man', 'captain american', 'black widow', 'hulk'] ['black widow', 'captain american', 'hulk', 'iron man', 'spider man']
list = sorted(heroes, reverse=True)
print(heroes, list)
# ['spider man', 'iron man', 'captain american', 'black widow', 'hulk'] ['spider man', 'iron man', 'hulk', 'captain american', 'black widow']
列表反转
- 使用
reverse()
反转列表元素的排列顺序 -
reverse()
将永久性地改变列表元素的排列顺序
heroes = []
heroes.append("spider man")
heroes.append("iron man")
heroes.append("captain american")
heroes.append("black widow")
heroes.append("hulk")
print(heroes)
# ['spider man', 'iron man', 'captain american', 'black widow', 'hulk']
heroes.reverse()
print(heroes)
# ['hulk', 'black widow', 'captain american', 'iron man', 'spider man']
列表长度
- 使用
len()
确定列表的长度,python计算列表元素时是从1开始的。
heroes = []
heroes.append("spider man")
heroes.append("iron man")
heroes.append("captain american")
heroes.append("black widow")
heroes.append("hulk")
print(heroes)
# ['spider man', 'iron man', 'captain american', 'black widow', 'hulk']
len = len(heroes)
print(len)
# 5
使用列表时避免索引错误
heroes = []
heroes.append("spider man")
heroes.append("iron man")
heroes.append("captain american")
heroes.append("black widow")
heroes.append("hulk")
print(heroes)
# ['spider man', 'iron man', 'captain american', 'black widow', 'hulk']
索引错误IndexError
:列表的索引是从0开始的
print(heroes[len(heroes)])
Traceback (most recent call last):
File "test.py", line 10, in <module>
print(heroes[len(heroes)])
IndexError: list index out of range
操作列表
遍历列表
当需要遍历列表中每个元素,可使用for
循环。
heroes = []
heroes.append("spider man")
heroes.append("iron man")
heroes.append("captain american")
heroes.append("black widow")
heroes.append("hulk")
print(heroes)
# ['spider man', 'iron man', 'captain american', 'black widow', 'hulk']
for hero in heroes:
print(hero.title())
# Spider Man
# Iron Man
# Captain American
# Black Widow
# Hulk
循环是让计算机自动完成重复工作的常用方式之一,循环时对列表中的每个元素,都将执行循环指定的步骤,不管列表包含多少个元素。在循环中,使用单复数分别表示元素和列表,是一个非常好的实践。
在for
循环中,每个缩进的代码行都是循环体的一部分,将针对列表中的每个值都会执行一次。
heroes = []
heroes.append("spider man")
heroes.append("iron man")
heroes.append("captain american")
heroes.append("black widow")
heroes.append("hulk")
print(heroes)
# ['spider man', 'iron man', 'captain american', 'black widow', 'hulk']
for hero in heroes:
print(hero.title() + " Hehe...")
print(hero.capitalize() + "\n")
# Spider Man Hehe...
# Spider man
#
# Iron Man Hehe...
# Iron man
#
# Captain American Hehe...
# Captain american
#
# Black Widow Hehe...
# Black widow
#
# Hulk Hehe...
# Hulk
避免缩进错误
- 忘记缩进
- 忘记缩进额外的代码行
- 不必要的缩进
- 循环后不必要的缩进
- 遗漏了冒好
for hero in heroes:
print(hero.title() + " Hehe...")
print(hero.capitalize() + "\n")
缩进错误IndentationError
File "test.py", line 11
print(hero.title() + " Hehe...")
^
IndentationError: expected an indented block
为避免意外缩进错误,请只缩进需要缩进的代码。
for hero in heroes:
print(hero.title() + " Hehe...")
print(hero.capitalize() + "\n")
print("the end")
从语法上看,代码是合法的,但由于存在逻辑错误,结果并不符合预期。
# Spider Man Hehe...
# Spider man
#
# the end
# Iron Man Hehe...
# Iron man
#
# the end
# Captain American Hehe...
# Captain american
#
# the end
# Black Widow Hehe...
# Black widow
#
# the end
# Hulk Hehe...
# Hulk
#
# the end
遗漏了冒好将导致语法错误 SyntaxError
for hero in heroes
print(hero.title() + " Hehe...")
print(hero.capitalize() + "\n")
print("the end")
File "test.py", line 10
for hero in heroes
^
SyntaxError: invalid syntax
数字列表
列表非常适合存储数字集合,python提供很多工具函数帮助高效地处理数字列表。
-
range()
生成一系列数字 -
range()
从指定的第一个值开始数,在到达指定的第二个值后停止,因此是不包含第二个值得。
for item in range(1,3):
print(item)
# 1
# 2
- 使用
range()
创建数字列表,可使用list()
将range()
的结果直接转换为列表。
print(list(range(1,10)))
# [1, 2, 3, 4, 5, 6, 7, 8, 9]
- 使用
range()
时可指定步长
print(list(range(1, 10, 2)))
# [1, 3, 5, 7, 9]
print(list(range(0, 10, 2)))
# [0, 2, 4, 6, 8]
squares = []
for item in range(1, 11):
squares.append(item**2)
print(squares)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
数字列表统计
对数字列表执行简单的统计计算
-
min()
获取数字列表中最小值 -
max()
获取数字列表中最大值 -
sum()
获取数组列表中的总和
list = []
for item in range(1, 11):
list.append(item**2)
print(list)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
min = min(list)
print(min)
# 1
max = max(list)
print(max)
# 100
sum = sum(list)
print(sum)
# 385
列表解析
列表解析会将for
循环和创建新元素的代码合并为一行,并自动附加新元素,用来生成列表。
list = [item**2 for item in range(1, 11)]
print(list)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
列表切片
- 处理列表的部分元素又称为切片
- 创建切片时可指定要使用的第一个元素和最后一个元素的索引
- 和
range()
函数一样,python在到达指定的第二个索引前面的元素后停止。
list = [item**2 for item in range(1, 11)]
print(list)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
piece = list[0:5]
print(piece)
# [1, 4, 9, 16, 25]
如果没有指定第一个起始索引则默认从列表开头开始
piece = list[:5]
print(piece)
# [1, 4, 9, 16, 25]
如果要让切片终止于列表末尾,可不用指定第二个结束索引。
piece = list[5:]
print(piece)
# [36, 49, 64, 81, 100]
如果不指定起始索引和结束索引,则会返回原列表。
piece = list[:]
print(piece)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
负数索引可以返回离列表末尾相应距离的元素
piece = list[-5:]
print(piece)
# [36, 49, 64, 81, 100]
遍历切片
如果要遍历列表中的部分元素,可以在for
循环中使用切片。
for item in list[0:5]:
print(item)
复制列表
要复制列表可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引[:]
。
list = [item**2 for item in range(1, 11)]
print(list)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
copy = list[:]
print(copy)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
网友评论