Python学习笔记3
一、列表
1、列表可以放不同的数据类型,而且列表可变。
ls = ["Python", 2020, [9, 19], {"ZhangSan":23}]
2、用list(可迭代对象)生成列表,包括字符串、元组、集合、range()
list("123456789")
#['1', '2', '3', '4', '5', '6', '7', '8', '9']
#range(起始,结束,步长),左闭右开
list(range(1,8,2)) #[1, 3, 5, 7]
3、拼接与成倍复制
a = [1, 2]
b = [3, 4]
a + b #[1, 2, 3, 4]
[0]*10
#[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
4、元素增加
# 末尾增加元素.append(元素)
a.append(8) #[1, 2, 8]
# 任意位置增加元素.insert(位置,元素)
a.insert(1,4) #[1, 4, 2, 8]
# 在尾部拼接其他列表.extend(列表名),和前面的“+”一样
a.extend(b) #[1, 4, 2, 8, 3, 4]
5、元素删除
# .pop(位置)删除指定位置元素,不指定默认为尾元素
a.pop(1) #[1, 2, 8, 3, 4]
a.pop() #[1, 2, 8, 3]
#.remove(元素)删除第一次遇到的指定元素
a = [1, 2, 4, 8, 8, 8, 16]
a.remove(8) #[1, 2, 4, 8, 8, 16]
#可以用while循环删除所有指定元素
while 8 in a:
a.remove(8)
print(a) #[1, 2, 4, 16]
6、元素查找
#.index(元素)返回元素位置
languages = ["Python", "C", "C++", "Java"]
idx = languages.index("C")
7、元素赋值
错误方法
languages2 = languages
print(languages2) #['Python', 'C', 'C++', 'Java']
看似没有问题,但实际这样做只是给这个列表一个别名,地址是共享的,当改变一个时,另一个也会被改变
languages[1] = "PHP"
print(languages2) #['Python', 'PHP', 'C++', 'Java']
正确的做法是使用.copy()或者切片方式(有区别)
languages = ["Python", "C", "C++", "Java"]
languages2 = languages.copy()
languages3 = languages[:]
languages.pop()
print(languages)
print(languages2)
print(languages3)
#输出
['Python', 'C', 'C++']
['Python', 'C', 'C++', 'Java']
['Python', 'C', 'C++', 'Java']
8、元素排序
#.sort()是永久排序,会改变列表,默认递增
ls = [3, 2, 5, 6, 7, 1]
ls.sort()
print(ls) #[1, 2, 3, 5, 6, 7]
ls.sort(reverse = True)
print(ls) #[7, 6, 5, 3, 2, 1]
#.sorted()是临时排序,不会改变列表
ls_2 = sorted(ls)
print(ls) #[7, 6, 5, 3, 2, 1]
print(ls_2) #[1, 2, 3, 5, 6, 7]
9、元素翻转
用切片或者.reverse(),前者不改变原列表,后者改变。
二、元组
元组也可以是多种元素,但是一旦定义好就不可变。除此之外其他操作和列表类似。
names = ("Peter", "Pual", "Mary")
1、打包和解包
#函数输出多个元素时,默认为元组格式
def f1(x):
return x,x**2
print(f1(3)) #(3, 9)
#解包复制
a, b = f1(3)
print(a)
print(b)
#输出
3
9
2、zip()函数
idx = ['20201','20202','20203','20204']
names = ['Zhang','Li','Zhao','Wang']
list(zip(idx,names)) #[('20201', 'Zhang'), ('20202', 'Li'), ('20203', 'Zhao'), ('20204', 'Wang')]
for num, name in zip(idx,names):
print(num,name)
#输出
20201 Zhang
20202 Li
20203 Zhao
20204 Wang
三、字典
字典的键值必须是不可变的类型,不能是列表、集合、字典等可变的类型,键值不能重复,否则前面的会被覆盖。
1、增加元素
students = {20201: "Zhang", 20202: "Li", 20203: "Zhao"}
students[20204] = "Wang"
#{20201: 'Zhang', 20202: 'Li', 20203: 'Zhao', 20204: 'Wang'}
2、删除元素
#直接用del 变量名[key] 删除
del students[20201]
#{20202: 'Li', 20203: 'Zhao', 20204: 'Wang'}
#使用.pop(key)
values = students.pop(20202) #删除的同时会返回值
students
#{20203: 'Zhao', 20204: 'Wang'}
#使用.popitem()随机删除一个键值对,并返回元组
students = {20201: "Zhang", 20202: "Li", 20203: "Zhao"}
key, value = students.popitem()
print(key, value) #20203 Zhao
print(students) #{20201: 'Zhang', 20202: 'Li'}
3、查找操作
d.get(key, default),从字典d中查找键值key对应的值,如果没有,则返回default
s = "牛奶奶找刘奶奶买榴莲牛奶"
d = {}
for i in s:
d[i] = d.get(i, 0) + 1
print(d)
#{'牛': 2, '奶': 5, '找': 1, '刘': 1, '买': 1, '榴': 1, '莲': 1}
4、d.keys()和d.values()
#可以用list()把他们变成列表
students = {20201: "Zhang", 20202: "Li", 20203: "Zhao"}
print(students.keys()) #dict_keys([20201, 20202, 20203])
print(students.values()) #dict_values(['Zhang', 'Li', 'Zhao'])
5、.item()方法及遍历
#.item()将字典变为元组
print(list(students.items()))
for k, v in students.items():
print(k, v)
#输出
[(20201, 'Zhang'), (20202, 'Li'), (20203, 'Zhao')]
20201 Zhang
20202 Li
20203 Zhao
四、集合
集合里的元素不能重复,和dict的键值类似。
1、集合运算
Set_1 = {1,2,3,4,5,6,7,8}
Set_2 = {2,4,6,8,10}
Set_1 & Set_2 #交集,{2, 4, 6, 8}
Set_1 | Set_2 #并集,{1, 2, 3, 4, 5, 6, 7, 8, 10}
Set_1 ^ Set_2 #并集-交集,{1, 3, 5, 7, 10}
Set_1 - Set_2 #Set_1 - 交集,{1, 3, 5, 7}
2、其他操作
.add(值) 增加元素
.remove(值) 删除元素
len(S) 集合长度