Python的数据类型
1. 列表是什么
- 「列表」是由一系列按顺序排列的元素组成
- 列表中的元素可以是「字符串」「数」「变量」
- Python中用方括号「[]」表示列表,用「,」分隔其中的元素
school="Hogwarts"
messages=['Gryffindor','Hufflepuff',199,f"{school}"]
print(messages)
2.列表的基本操作
2.1 创建一个空列表
messages=[]
2.2 查
(1)访问列表元素
列表是有序集合
列表元素是通过列表元素的位置「索引」来访问的
要访问列表元素,可指出列表的名称,再指出元素的索引,后者放在方括号内
messages=['Gryffindor','Hufflepuff',199,"Slytherin","Ravenclaw"]
print(messages[3]) ###
print(messages[3].upper()) ###
----------
Slytherin
SLYTHERIN
索引的规则
索引从0开始
[-i]为倒数第i个元素的索引
messages=['Gryffindor','Hufflepuff',199,"Slytherin","Ravenclaw"]
print(messages[-1]) ###
----------
Ravenclaw
在字符串使用列表中某个元素的值
使用方法类似于使用变量
messages=['Gryffindor','Hufflepuff',199,"Slytherin","Ravenclaw"]
print(f"One of the Hogwarts's houses is {messages[0]}") ###
----------
One of the Hogwarts's houses is Gryffindor
(2)查看列表长度
messages=['Gryffindor','Hufflepuff',199,"Slytherin","Ravenclaw"]
print(len(messages))
----------
5
2.3 改:修改列表元素
指定列表名和要修改的元素的索引,再指定该元素的新值
messages=['Gryffindor','Hufflepuff',199,"Slytherin","A"]
print(messages)
messages[-1]="Ravenclaw" ###
print(messages)
----------
['Gryffindor', 'Hufflepuff', 199, 'Slytherin', 'A']
['Gryffindor', 'Hufflepuff', 199, 'Slytherin', 'Ravenclaw']
2.4 增:在列表中添加元素
方式1:在列表末尾添加元素
对列表使用方法append()
messages=['Gryffindor','Hufflepuff',199,"Slytherin"]
print(messages)
messages.append("Ravenclaw") ###
print(messages)
----------
['Gryffindor', 'Hufflepuff', 199, 'Slytherin']
['Gryffindor', 'Hufflepuff', 199, 'Slytherin', 'Ravenclaw']
方式2:在列表任意位置插入元素
对列表使用insert()方法,为列表指定要插入元素的索引和值
messages=['Gryffindor','Hufflepuff',199,"Slytherin"]
print(messages)
messages.insert(1,"Ravenclaw") ###
print(messages)
----------
['Gryffindor', 'Hufflepuff', 199, 'Slytherin']
['Gryffindor', 'Ravenclaw', 'Hufflepuff', 199, 'Slytherin']
2.5 删:从列表中删除元素
方式1:通过元素的位置进行删除
使用del语句
messages=['Gryffindor','Hufflepuff',"Ravenclaw","Slytherin"]
print(messages)
del messages[2] ###
print(messages)
----------
['Gryffindor', 'Hufflepuff', 'Ravenclaw', 'Slytherin']
['Gryffindor', 'Hufflepuff', 'Slytherin']
方式2:删除任意位置的值,并接着使用该值(智能版)
使用方法pop(),可以删除列表某个位置的元素,并且接着使用它
即列表就像一个栈,删除列表某个位置的元素相当于弹出某个位置的元素
方法pop()括号内不提供位置信息,则默认删除最后一个元素
messages=['Gryffindor','Hufflepuff',"Ravenclaw","Slytherin"]
print(messages)
poped_house=messages.pop() ###
print(messages)
print(poped_house)
----------
['Gryffindor', 'Hufflepuff', 'Ravenclaw', 'Slytherin']
['Gryffindor', 'Hufflepuff', 'Ravenclaw']
Slytherin
方法pop()括号内提供位置信息,则弹出该位置对应的元素
messages=['Gryffindor','Hufflepuff',"Ravenclaw","Slytherin"]
print(messages)
poped_house=messages.pop(0) ###
print(messages)
print(poped_house)
----------
['Gryffindor', 'Hufflepuff', 'Ravenclaw', 'Slytherin']
['Hufflepuff', 'Ravenclaw', 'Slytherin']
Gryffindor
①定义一个列表
②从列表中弹出一个值,并将该值赋给「poped_house」
方式3:根据值删除元素,并接着使用该值(手动版)
使用方法remove()
messages=['Gryffindor',199,'Hufflepuff',"Ravenclaw",199,"Slytherin",777]
print(messages)
element=777 ###
messages.remove(element) ###
print(messages)
print(element)
----------
['Gryffindor', 199, 'Hufflepuff', 'Ravenclaw', 199, 'Slytherin', 777]
['Gryffindor', 199, 'Hufflepuff', 'Ravenclaw', 199, 'Slytherin']
777
方法remove()只删除第一个指定的值。如果指定的值在列表中多次出现,只会删除索引最靠前的值
messages=['Gryffindor',199,'Hufflepuff',"Ravenclaw",199,"Slytherin",777]
print(messages)
element=199
messages.remove(element)
print(messages)
print(element)
----------
['Gryffindor', 199, 'Hufflepuff', 'Ravenclaw', 199, 'Slytherin', 777]
['Gryffindor', 'Hufflepuff', 'Ravenclaw', 199, 'Slytherin', 777]
199
2.6 排序
方式1:按字母顺序,列表进行永久排序
方法sort()可以永久的修改列表中元素的排列顺序
messages=['Gryffindor',"Ravenclaw","Slytherin",'Hufflepuff']
print(messages)
messages.sort() ###正序
print(messages)
messages=['Gryffindor',"Ravenclaw","Slytherin",'Hufflepuff']
print(messages)
messages.sort(reverse=True) ###倒序
print(messages)
----------
['Gryffindor', 'Ravenclaw', 'Slytherin', 'Hufflepuff']
['Gryffindor', 'Hufflepuff', 'Ravenclaw', 'Slytherin']
['Gryffindor', 'Ravenclaw', 'Slytherin', 'Hufflepuff']
['Slytherin', 'Ravenclaw', 'Hufflepuff', 'Gryffindor']
方式2:按字母顺序,对列表进行临时排序
函数sorted()
messages=['Gryffindor',"Ravenclaw","Slytherin",'Hufflepuff']
print(messages)
print(sorted(messages)) ###正序
print(sorted(messages,reverse=True)) ###倒序
----------
['Gryffindor', 'Ravenclaw', 'Slytherin', 'Hufflepuff']
['Gryffindor', 'Hufflepuff', 'Ravenclaw', 'Slytherin']
['Slytherin', 'Ravenclaw', 'Hufflepuff', 'Gryffindor']
方式3:反转列表元素的排列顺序
方法reverse()
messages=['Gryffindor',"Ravenclaw","Slytherin",'Hufflepuff']
print(messages)
messages.reverse() ###
print(messages)
----------
['Gryffindor', 'Ravenclaw', 'Slytherin', 'Hufflepuff']
['Hufflepuff', 'Slytherin', 'Ravenclaw', 'Gryffindor']
列表的基本操作小结
- 查
messages[i]
- 改
messages[i]="元素值"
- 增
messages.append("元素值")
-----
messages.insert(索引值,"元素值")
- 删
del messages[i]
-----
messages.pop(i)
-----
messages.remove("元素值")
- 排序
messages.sort()
-----
sorted(messages)
-----
messages.reverse()
3 对列表进行遍历
对列表中的每个元素都执行相同的操作时,可以使用Python中的for循环遍历整个列表
for循环对列表中的每个元素,都将执行循环指定的步骤
houses=['Gryffindor','Hufflepuff',"Slytherin","Ravenclaw"]
for each_house in houses: ###
print(each_house)
----------
Gryffindor
Hufflepuff
Slytherin
Ravenclaw
3.1 代码运行过程
①.1 定义一个列表「houses」
②.1 定义一个for循环,Python从列表「houses」中取出第一个元素「Grayffindor」,并将其与变量「each_house」相关联
③.1 打印赋给变量「each_house」的值
– 由于列表中还有其他元素,返回到循环的第一行「for each_house in houses:」
②. 2 Python从列表「houses」中取出第二个元素「Hufflepuff」,并将其与变量「each_house」相关联
③.2 打印赋给变量「each_house」的值
– 由于列表中还有其他元素,返回到循环的第一行「for each_house in houses:」
②. 2 Python从列表「houses」中取出第三个元素「Slytherin」,并将其与变量「each_house」相关联
③.2 打印赋给变量「each_house」的值
– 由于列表中还有其他元素,返回到循环的第一行「for each_house in houses:」
②.4 Python从列表「houses」中取出最后一个元素「Ravenclaw」,并将其与变量「each_house」相关联
③.4 打印赋给变量「each_house」的值
– 列表中没有其他的值,循环结束
3.2 注意事项
★ 注1:for循环中,每个缩进的代码都是循环的一部分,将针对列表中的每个值都执行一次
houses=['Gryffindor','Hufflepuff',"Slytherin","Ravenclaw"]
for each_house in houses: ###
print(f"\n{each_house}")
print(f"Hogwarts has four houses,{each_house} is one of them")
----------
Gryffindor
Hogwarts has four houses,Gryffindor is one of them
Hufflepuff
Hogwarts has four houses,Hufflepuff is one of them
Slytherin
Hogwarts has four houses,Slytherin is one of them
Ravenclaw
Hogwarts has four houses,Ravenclaw is one of them
★ 注2:for循环后,没有缩进的代码只会执行一次,不会重复执行
houses=['Gryffindor','Hufflepuff',"Slytherin","Ravenclaw"]
for each_house in houses: ###
print(f"\n{each_house}")
print(each_house) ###
----------
Gryffindor
Hufflepuff
Slytherin
Ravenclaw
Ravenclaw
★ 注3:避免缩进错误:Python根据缩进判断前后两行代码的关系
①忘记缩进
②不必要的缩进
★ 注4:不要遗忘冒号
4 数值列表的创建与操作
4.1 range()函数
该函数能够轻松地生成一系列数
for value in range(1,5): ###
print(value)
----------
1
2
3
4
range(1,5)只打印1~4,这称为编程语言中的差一行为。
因为函数range()让Python从指定的第一个数开始计数,并在到达指定的第二个数时停止。
因为它在第二个值出停止,所以输出不包括该值。
函数range()的第一个参数为开始值,第二个参数为结束值。不指定开始值默认从0开始。
for value in range(6):
print(value)
----------
0
1
2
3
4
5
函数range()还可以在第三个参数上指定步长。
for value in range(0,15,2):
print(value)
----------
0
2
4
6
8
10
12
14
4.2 使用range()函数创建列表
Example1:简单创建一个数字列表
values=[]
for value in range(1,6):
values.append(value) ###
print(values)
----------
[1, 2, 3, 4, 5]
Example2:创建一个数字列表,列表元素是1~5的平方
values=[]
for value in range(1,6):
value=value**2 ###
values.append(value) ###
print(values)
----------
[1, 4, 9, 16, 25]
4.3 使用列表解析创建数字列表
列表解析将for循环与创建新元素的代码合成一行,形成简单的创建数字列表的方式
values=[value**2 for value in range(1,6)] ###
print(values)
----------
[1, 4, 9, 16, 25]
几个部分:
①用方括号定义一个列表「values」
②括号内定义列表的元素为变量「value」
③括号内定义一个for循环,给变量「value」提供值
4.4 对数字列表执行简单的统计计算
使用函数max()、min()、sum()找出数字列表的最大值、最小值、总和
values=[]
for value in range(1,6):
value=value**2
values.append(value)
print(values)
print(max(values)) ###最大值
print(min(values)) ###最小值
print(sum(values)) ###总和
----------
[1, 4, 9, 16, 25]
25
1
55
5 访问和处理列表的部分元素——切片
切片就是列表的一部分元素
5.1 创建切片
通过列表的索引创建切片
指定索引x和y,返回索引为x到第y-1的元素
magic_words=['Gryffindor','Slytherin','Hufflepuff','Ravenclaw','Hogwarts','Hogsmeade','Hippogriff','Dumbledore','Grindelwald']
print(magic_words[0:3])
----------
['Gryffindor', 'Slytherin', 'Hufflepuff']
没有指定第一个索引,Python自动从头开始
magic_words=['Gryffindor','Slytherin','Hufflepuff','Ravenclaw','Hogwarts','Hogsmeade','Hippogriff','Dumbledore','Grindelwald']
print(magic_words[:3])
----------
['Gryffindor', 'Slytherin', 'Hufflepuff']
没有指定最后一个索引,Python自动索引到最后一个元素
magic_words=['Gryffindor','Slytherin','Hufflepuff','Ravenclaw','Hogwarts','Hogsmeade','Hippogriff','Dumbledore','Grindelwald']
print(magic_words[6:])
----------
['Hippogriff', 'Dumbledore', 'Grindelwald']
两个参数都不指定,则是选择全部列表
magic_words=['Gryffindor','Slytherin','Hufflepuff','Ravenclaw','Hogwarts','Hogsmeade','Hippogriff','Dumbledore','Grindelwald']
print(magic_words[:])
----------
['Gryffindor', 'Slytherin', 'Hufflepuff', 'Ravenclaw', 'Hogwarts', 'Hogsmeade', 'Hippogriff', 'Dumbledore', 'Grindelwald']
负数索引在其中仍然适用
magic_words=['Gryffindor','Slytherin','Hufflepuff','Ravenclaw','Hogwarts','Hogsmeade','Hippogriff','Dumbledore','Grindelwald']
print(magic_words[-3:])
----------
['Hippogriff', 'Dumbledore', 'Grindelwald']
5.2 遍历切片
使用for循环来遍历切片
magic_words=['Gryffindor','Slytherin','Hufflepuff','Ravenclaw','Hogwarts','Hogsmeade','Hippogriff','Dumbledore','Grindelwald']
for magic_word in magic_words[3:6]:
print(magic_word.upper())
----------
RAVENCLAW
HOGWARTS
HOGSMEADE
6 复制列表
使用包含整个列表的切片复制列表
magic_words_1=['Hogwarts','Hogsmeade','Dumbledore','Grindelwald']
magic_words_2=magic_words_1[:] ###
magic_words_1.append("Voldemort")
magic_words_2.append("owl")
print(magic_words_1)
print(magic_words_2)
----------
['Hogwarts', 'Hogsmeade', 'Dumbledore', 'Grindelwald', 'Voldemort']
['Hogwarts', 'Hogsmeade', 'Dumbledore', 'Grindelwald', 'owl']
对比不使用切片,而是试图使用赋变量的方法来复制列表
magic_words_1=['Hogwarts','Hogsmeade','Dumbledore','Grindelwald']
magic_words_2=magic_words_1 ###
magic_words_1.append("Voldemort")
magic_words_2.append("owl")
print(magic_words_1)
print(magic_words_2)
----------
['Hogwarts', 'Hogsmeade', 'Dumbledore', 'Grindelwald', 'Voldemort', 'owl']
['Hogwarts', 'Hogsmeade', 'Dumbledore', 'Grindelwald', 'Voldemort', 'owl']
变量「magic_words_1」与我们创建的列表相关联
变量「magic_words_2」与变量「magic_words_1」相关联
↓
变量「magic_words_2」与我们创建的列表相关联
↓
这种方式实际上只是让变量「magic_words_2」关联到变量「magic_words_1」相关联的列表