1. 列表概念
python的中高级数据类型:列表(list)、字典(dict)、集合(tupe)
什么是列表?
在实际开发中,经常需要将一组(不只一个)数据存储起来,以便后边的代码使用。
列表就是这样的一个数据结构。
列表用[ ]中号来标识,相邻元素之间用逗号,分隔。
不同于C,java等语言的数组,python的列表列表内部的元素可以是任意类型的
1.1 创建列表
names = ["张三","李四","王五","Abc",123,"^"]
print(names)
#输出:
['张三', '李四', '王五', 'Abc', 123, '^']
2. 列表的基本操作
列表是 Python 序列的一种
我们可以使用索引(ndex)访问列表中的某个元素(得到的是一个元素的值)
也可以使用切片访问列表中的一组元素 (得到的是一个新的子列表)。
列表索引也分为正索引(从0开始)、负索引(从-1开始),如下图所示:
列表的元素访问:
names = ["张三","李四","王五","Abc",123,"^"]
print(names[0]) #取列表中第一个元素
print(names[3]) #取列表中第三个元素
#输出:
张三
Abc
列表切片:
切片即根据列表元素的索引,取出多个元素,可以同时取多个
[ 起始索引 :结束索引 :步长]
切片后得到一个新的列表:
names = ["张三","李四","王五","Abc",123,"^"]
print(names[0:2]) #取1~3的3个元素,步长默认为1,可省略
print(names[1:4]) #取2~3的2个元素
print(names[-3:]) #取最后3个元素,结束索引也可省略
print(names[1:5:2]) #每2个元素中取1个
print(names[:]) #取出所有元素
#输出:
['张三', '李四']
['李四', '王五', 'Abc']
['Abc', 123, '^']
['李四', 'Abc']
['张三', '李四', '王五', 'Abc', 123, '^']
print(names[:7]) #切片时超出索引,不会报错
#输出:仍输出所有元素
['张三', '李四', '王五', 'Abc', 123, '^']
in操作:
判断某个元素是否在列表中,元素必须完全匹配,返回的是bool值
如下:
names = ["张三","李四","王五","Abc",123,"^"]
print("张三" in names)
print("四" in names)
#输出:
True
False(由于“四”和“李四”不完全匹配,所以返回false)
列表拼接:
列表属于可变数据类型
因此可以进行增、删、改,也可以像字符串一样进行拼接,得到一个新的列表
示例如下:
l1 = ["张三","李四","王五"]
l2 = [23,26,28]
print(l1+l2)
#输出:
['张三', '李四', '王五', 23, 26, 28]
创建数字列表
使用range() 创建数字列表
要创建数字列表,可使用函数list() 将range() 的结果直接转换为列表。
如果将range() 作为list() 的参数,输出将为一个数字列表。
将这些数字转换为一个列表,可使用list()
示例如下:
numbers = list(range(1,6))
print(numbers)
#输出:
[1, 2, 3, 4, 5]
使用函数range() 几乎能够创建任何需要的数字集
例如,如何创建一个列表,其中包含前10个整数(即1~10)的平方呢?在Python中,两个星号(** )表示乘方运算。
squares = []
for value in range(1,11):
squares.append(value**2)
print(squares)
#输出:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
对数字列表做简单的计算
有几个专门用于处理数字列表的Python函数。
例如,你可以轻松地找出数字列表的最大值、最小值和总和:
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(min(digits))
print(max(digits))
print(sum(digits))
#输出:
0
9
45
列表解析:
前面介绍的生成列表squares 的方式包含三四行代码
而列表解析让你只需编写一行代码就能生成这样的列表。
列表解析将for 循环和创建新元素的代码合并成一行,并自动附加新元素。
代码示例如下:
squares = [value**2 for value in range(1,11)]
print(squares)
#输出:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
3. 列表的内置方法
内置方法,可以帮助我们对列表对象的数据元素进行管理(增删改查)
计算列表元素长度:
求列表元素的长度,可以使用len(列表名)
names = ["张三","李四","王五","Abc",123,"^"]
print(len(names))
#输出:
6
添加列表元素:
添加元素,一个有三个方法:
appen[]:往元素最后追加新的元素
insert[]:可在列表的任何位置添加新元素,因此需要指定新元素的索引和值。
exten[]:列表合并,原有列表的数据元素会发生变化
l = [1,2,3,4,5,6]
l.append(7)
print(l)
#输出:
[1, 2, 3, 4, 5, 6, 7]
l2 = [1,2,3,4,5,6]
l2.insert(0,"张三")
print(l2)
#输出:
['张三', 1, 2, 3, 4, 5, 6]
l3 = [1,2,3]
l4 = [-1,-2,-3]
l3.extend(l4)
print(l3)
#输出:
[1, 2, 3, -1, -2, -3]
删除/修改列表元素:
删除、修改列表元素,一共有4个方法:
remove():删除指定元素
pop(index):按照索引删除元素,返回删除的元素,如果还需要用到,可以用一个变量接收
clear():清空列表元素,保留一个空列表
del 列表名[index]:指定索引删除,索引越界(不存在的索引)会报错
l = ["张三","李四","王五","Abc",123,"^"]
l.remove(123) #删除指定元素
print(l)
#输出:
['张三', '李四', '王五', 'Abc', '^']
l1 = ["张三","李四","王五","Abc",123,"^"]
l1.pop(-1) #按照索引删除
print(l1)
#输出:
['张三', '李四', '王五', 'Abc', 123]
l2 = ["张三","李四","王五","Abc",123,"^"]
l2.clear() #清空列表元素,保留一个空列表
print(l2)
#输出:
[]
l3 = ["张三","李四","王五","Abc",123,"^"]
del l3[1]
print(l3)
#输出:
['张三', '王五', 'Abc', 123, '^']
查看/组织列表元素:
列表中,元素的排列顺序常常是无法预测的,因为你并非总能控制用户提供数据的顺序。
这虽然在大多数情况下都是不可避免的,但你经常需要以特定的顺序呈现信息。
有时候,你希望保留列表元素最初的排列顺序,而有时候又需要调整排列顺序。
Python提供了很多组织列表的方式,可根据具体情况选用。
查看元素的常用方法如下:
sort():对元素永久排序,排序后,列表元素位置会发生变化
sorted():对元素进行临时排序
count():统计某个元素出现的次数,不改变列表
reverse():列表翻转,翻转后,列表元素位置会发生变化
index():查看某个元素的索引位置
具体代码示例如下:
l = [22,12,19,33,100]
l.sort() #对列表元素永久排序
print(l)
print(l.count(22)) #统计22个元素出现的次数
l.reverse() #对列表元素进行翻转
print(l)
#输出:
[12, 19, 22, 33, 100]
1
[100, 33, 22, 19, 12]
l2 = [22,12,19,33,100]
print(sorted(l2)) #对列表元素进行临时排序
print(l2)
#输出:从二个输出可以看出,结果还是与原始的元素位置一致
[12, 19, 22, 33, 100]
[22, 12, 19, 33, 100]
l3 = [22,12,19,33,100]
print(l3.index(12)) #查找12这个元素的位置
#输出:
1
4. 复制列表
经常需要根据既有列表创建全新的列表。
下面来介绍复制列表的工作原理,以及复制列表可提供极大帮助的一种情形。
要复制列表,可创建一个包含整个列表的切片,方法是:
同时省略起始索引和终止索引([:] )。
这让Python创建一个始于第一个元素,终止于最后一个元素的切片,即复制整个 列表。
'''
假设有一个列表:
其中包含你最喜欢的四种食品,而你还想创建另一个列表,在其中包含一位朋友喜欢的所有食品。
不过,你喜欢的食品,这位朋友都喜欢,因此你可以通过复制来创建这个列表:
'''
my_foods = ['pizza', 'falafel', 'carrot cake']
#不指定任何索引的情况下从列表my_foods 中提取一个切片,从而创建了这个列表的副本,再将该副本存储到变量friend_foods中
friend_foods = my_foods[:]
print("My favorite foods are:")
print(my_foods)
print("\nMy friend's favorite foods are:")
print(friend_foods)
#输出:打印每个列表后,我们发现它们包含的食品相同
My favorite foods are:
['pizza', 'falafel', 'carrot cake']
My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake']
5.列表的遍历
遍历整个列表:
你经常需要遍历列表的所有元素,对每个元素执行相同的操作。
例如:
在游戏中,可能需要将每个界面元素平移相同的距离;
对于包含数字的列表,可能需要对每个元素执行相 同的统计运算;
在网站中,可能需要显示文章列表中的每个标题。
需要对列表中的每个元素都执行相同的操作时,可使用Python中的for 循环。
代码示例如下:
#假设我们有一个魔术师名单,需要将其中每个魔术师的名字都打印出来:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)
#输出:
alice
david
carolina
#还可以结合列表内置方法,将输出转为大写
print(magician.upper())
#输出:
ALICE
DAVID
CAROLINA
遍历切片:
如果要遍历列表的部分元素,可在for 循环中使用切片。
在下面的示例中,我们遍历前三名队员,并打印他们的名字:
players = ['charles', 'martina', 'michael', 'florence', 'eli']
print("Here are the first three players on my team:")
for player in players[:3]:
print(player.title())
#输出:
Here are the first three players on my team:
Charles
Martina
Michael
纯数字类型列表,进行求和
num = [12,19,23,42,50,7]
s = 0
for i in num:
s += i
print(s)
#输出:
153
结合for循环,执行更多操作:
下面来扩展前面的示例,对于每位魔术师,都打印一条消息,指出他的表演太精彩了。
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")
#输出:
Alice, that was a great trick!
David, that was a great trick!
Carolina, that was a great trick!
下面再添加一行代码,告诉每位魔术师,我们期待他的下一次表演:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")
print("I can't wait to see your next trick, " + magician.title() + ".\n")
#输出:
Alice, that was a great trick!
I can't wait to see your next trick, Alice.
David, that was a great trick!
I can't wait to see your next trick, David.
Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.
在for 循环结束后执行一些操作:
for 循环结束后再怎么做呢?
通常,你需要提供总结性输出或接着执行程序必须完成的其他任务。
在for 循环后面,没有缩进的代码都只执行一次,而不会重复执行。
下面来打印一条向全体魔术师致谢的消息,感谢他们的精彩表演。
想要在打印给各位魔术师的消息后面打印 一条给全体魔术师的致谢消息,
需要将相应的代码放在for 循环后面,且不缩进:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician.title() + ", that was a great trick!")
print("I can't wait to see your next trick, " + magician.title() + ".\n")
print("Thank you, everyone. That was a great magic show!")
#输出:
Alice, that was a great trick!
I can't wait to see your next trick, Alice.
David, that was a great trick!
I can't wait to see your next trick, David.
Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.
Thank you, everyone. That was a great magic show!
列表推导式:
列表推导式(List Comprehension)也被称为列表解析式,是一种用于创建列表的简洁语法结构。它是Python中独特的数据处理方式之一,可以从一个数据序列构建另一个新的数据序列。
列表推导式的格式通常为:
[表达式 for 变量 in 列表]
也可以加入条件筛选,格式为:
[表达式 for 变量 in 列表 if 条件]
。-------->>
下面是结合for循环,没有使用推导式、与使用了推导式的代码示例:
list1 = [1,2,3,4,5,6] #列表1的元素内容
list2 = [] #列表2是个空的列表
for item in list1: #针对列表1做循环
list2.append(item**2) #列表2的新增内容为:列表1每个元素的2次幂
print(list2)
#输出:
[1, 4, 9, 16, 25, 36]
#使用列表推导式的简化写法:
list1 = [1,2,3,4,5,6] #列表1的元素内容
list2 = []
list3 = [item**2 for item in list1] #一行代码的简写
print(list3)
#输出:
[1, 4, 9, 16, 25, 36]