一、列表 list
定义:是处理一组有序项目的数据结构
格式:列表名 = [ 元素1,元素2,元素3,元素4,……]
注意:
列表的所有元素放在一对中括号" [] "中,并使用逗号 “,” 隔开
一个列表中的数据类型可以各不相同 [ 1,2,'a',3]
列表可以进行切片操作 -(切片含义详见字符串部分)
列表时可迭代对象,可以for循环遍历取值
常见操作:
添加元素
li = ["one","two","three"]
**append()**: 整体添加元素
li.append("four") ----- ["one","two","three"."four"]
**extend()**: 分散添加,及那个另外一个类型中的元素逐一添加 ;==必须是可迭代的对象==
li.extend("four") ----- ["one","two","three"."f","o","u","r"]
li.extend(2) ---- 报错
**insert()**: 在指定位置插入元素;指定位置如果有元素,原有元素会后移;没有指定下标位置,报错
li.insert(3,"four") ----- ["one","two","three"."four"]
li.insert(0,"four") ----- ["four","one","two","three"."four"]
li.insert("four") ----- 报错
修改元素 :直接通过下标就可以进行修改
li = [1,2,3]
li[1] = "a" ----- li = [1,"a", 3]
查询元素
in : 判断指定元素是否存在列表中,如果存在就跟会True, 不存在就返回Flase
not in : 判断指定元素是否存在列表中,如果不存在就跟会True, 存在就返回Flase
# 用户输入昵称,重复则不能使用 name_list = ["小王","小张","小李"] while True: name = input("请输入你的名字:") if name in name_list: print("昵称重复不能使用") else : print("名字不重复,可以使用") name_list.append(name) #把昵称添加到列表中 break print(name_list)index : 返回指定数据所在位置的下标,如果查找的数据不存在就会报错
count:统计指定数据在当前列表出现的次数
跟字符串的用法相同
删除元素
li = ["a","b","c","d","a"]
**del**: 删除列表/根据下标删除
del li ----删除列表
del li[2] -----["a","b","d"] 删除指定下标
**pop()**: 删除指定下标的数据,python3版本默认删除最后一个元素
li.pop() ----- ['a', 'b', 'c'] # 不指定下标,默认删除列表最后一个元素
li.pop(1)----- ['a', 'c', 'd'] # 不能指定元素删除,只能指定下标1进行删除,下标不能超出范围
**remove()**:根据元素的值进行删除
li.remove('b") ----- ['a', 'c', 'd']
li.remove("t")----- 报错,列表中不存在这个元素
li.remove("a") ----['b', 'c', 'd', 'a'] ,有相同元素时,默认删除最开始出现的指定元素
排序元素
li = [1,5 ,3, 6,4,2]
**sort()**: 将列表按指定顺序重新排列,默认从小到大
li.sort() -----[1,2,3,4,5,6]
**reverse()**: 倒序,将列表倒置(反过来)
li.reverse() -----[2,4,6,3,5,2]
`注意: 将两个配合使用,可以实现从大到小排列`或者:li.sort(reverse = True)-----[6,5, 4, 3, 2, 1]
列表推导式:
格式一: [ 表达式 for 变量 in 列表]
注意:in后面不仅可以放列表,还可以放range()、可迭代对象
# 添加元素到列表 li = [li.append(i) for i in range(1,6)] print(li) #输出 [1,2,3,4,5]格式二:[表达式 for 变量 in 列表 if 条件]
# 把奇数放到列表里面 li = [i for i in range(1,11) if i % 2 != 0] print(li) # 输出 [1, 3, 5, 7, 9]列表的嵌套
含义: 一个列表里面又有一个列表
li = [1,2,3,[4,5,6]] [4,5,6] 是里面的列表
li[3] = [4,5,6] 取出里面的列表
li[3][2] = 6 取出内列表中的下标为2的元素
二、元组 tuple
基本格式:元组名 = (元素1,元素2,元素3……)
所有元素包含在小括号内,元素与元素之间用“ ,”隔开,不同元素也可以是不同的数据类型
只有一个元素的时候,末尾必须加上逗号“,”,否则返回这个唯一的值的数据类型
元组与列表的区别:基本类似,但是不允许增删改等操作,只支持查询
元组也有下标,从左往右,从0开始
可以使用count()、index()、len()、in、not in 、切片等,和列表用法相同
应用场景:
函数的参数和返回值
格式化输出后面的()本质上就是一个元组:print(“%s的年龄是:%的” %==(name,age)==)
数据不可以被修改,保护数据的安全
tua=() # 创建一个空元组 print(type(tua)) # 输出类型 tuple <class 'tuple'> tub = (1) print(type (tub)) # 输出类型 int <class 'int'> tuc=("a") print(type(tuc)) # 输出类型 str <class 'str'> tud=("a",) print(type(tud)) # 输出类型 tuple <class 'tuple'>三、字典 dict
格式: dic = {"name": "小陈",“age": 18 ,"sex": "female"}
注意:
键值对形式保存,键 具有唯一性,但 值 可以重复;
当键重复时,不会报错,前面的值会被后面的值覆盖
常见操作:
查看元素 :
格式1:变量名[键名]
注意:字典中没有下标,不可以根据下标;查找元素需要根据键名,键名相当于下标
dic = {"name": "小陈","age": 18 ,"sex": "female"} print(dic["name"]) # 小陈 print(dic["tel"]) #KeyError: 'tel' 输出报错,没有键名格式2:变量名.get(键名)
dic = {"name": "小陈","age": 18 ,"sex": "female"} print(dic.get("age")) # 18 print(dic.get("tel")) # None 无键名,输出None,不报错 print(dic.get("tel","无此字段")) # 输出无此字段,如果没有这个键名,返回自己设置的默认值修改元素
格式:变量名[键名] = 值
注意:字典通过键名修改,列表通过下标修
dic = {"name": "小陈","age": 18 ,"sex": "female"} dic["age"] = 20 print(dic) dic["tel"] = "123456" # 键名不存在时,新增该键值对 print(dic) # {'name': '小陈', 'age': 20, 'sex': 'female'} # {'name': '小陈', 'age': 20, 'sex': 'female', 'tel': '123456'}添加元素
格式:变量名[键名] = 值
注意:键名存在就修改值,键名不存在,就新增元素
删除元素
del 字典名 :删除整个字典 del dic
del 字典名[键名] : 删除指定键值对,当键名不存在就会报错 del dic['name']
clear () : 清空整个字典里面的东西,但保留了这个字典
pop () : 删除指定键值对,键不存在就会报错,括号中空时也报错
popitem (): python3.7之前的版本是随机删除一个键值对,python3.7 之后的版本默认删除最后一个键值对。
dic = {"name": "小陈","age": 18 ,"sex": "female"} del dic["age"] print(dic) #{'name': '小陈', 'sex': 'female'} dic1 = {"name": "小陈","age": 18 ,"sex": "female"} dic1.clear() print(dic1) # {} dic1["name"]="小肖" # 在空字典中新增键值对 print(dic1) # {'name': '小肖'} dic2 = {"name": "小陈","age": 18 ,"sex": "female"} dic2.pop("name") print(dic2) # {'age': 18, 'sex': 'female'} dic2.popitem() print(dic2) #{'age': 18}求长度
len () len(dic) 求长度,就是有几对键值对
不止是字典,还可以求列表等
keys ( ) : 返回字典里面包含的所有键名
values ( ) : 返回字典里面包含的所有值
items ( ) : 返回字典里面包含的所有的键值对,键值对以元组的形式
dic = {"name": "小陈","age": 18 ,"sex": "female"} print(len( dic)) # 3 print(dic.keys()) # dict_keys(['name', 'age', 'sex']) for i in dic: print(i) # name # age # sex print(dic.values()) for i in dic.values(): print(i) # 小陈 # 18 # female print(dic.items(),type(dic.items())) # dict_items([('name', '小陈'), ('age', 18), ('sex', 'female')]) <class 'dict_items'> for i in dic.items(): print(i,type(i)) # ('name', '小陈') <class 'tuple'> # ('age', 18) <class 'tuple'> # ('sex', 'female') <class 'tuple'>
应用场景:使用键值对,描述一个物体的相关信息
四、集合 set
格式:集合名 = { 元素1,元素2,元素3……}
定义一个空集合 : s =set() 如果是 s={ },定义一个空字典
集合具有无序性
举例:
s ={"a","b","c","d"},print 的时候,每次输出的结果元素顺序都不一样
s ={6,3,4,5,8,9,10}, print的时候,每次输出的结果都是一样的,是按照元素从小到大排序
集合的无序性实现方式涉及了hash(哈希表)
hash("a")--每次运行结果都不同,hash值不同,那么在hash表中的位置也不同,这就实现了集合的无序性
hash(1) ---python中int 整型的hash值就是它本身,在hash表中的位置不会发生变化,所以顺序就不会改变
利用无序性:不能修改集合中的值
集合具有唯一性 :可以自动去重
s = {1,2,3,4,5,6,7,8,92,3,4,5,6} ----- print(s) # 输出{1, 2, 3, 4, 5, 6, 7, 8, 92}
可以用于元组或者列表去重
s= set([1,2,3,4,5,6,7,8,92,3,4,5,6]) ---- 将列表转换成集合
print(s) ---- {1, 2, 3, 4, 5, 6, 7, 8, 92}
常见操作:
添加元素
add() :
添加的是一个整体
集合的唯一性,决定了如果需要添加的元素在原集合中已经存在,就不进行任何操作
一次只能添加一个元素,添加多个就报错
s ={1,2,3,4,5,6,7,8,9,10} s.add(11) s.add((11,12)) # 一个元组作为一个元素 print(s) # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, (11, 12)}update():
把传入的元素拆分,一个个放进集合
添加的是一个可迭代的对象:如 字符串/列表/字典/元组
s ={1,2,3,4,5} s.update([6,7,8]) s.update("abc") s.update((9,)) s.update({"age": 18,"name": "小陈"}) print(s) # 输出 {1, 2, 3, 4, 5, 6, 7, 8, 9, 'b', 'a', 'age', 'name', 'c'}
删除元素
remove () :
选择删除的元素,如果集合中有就删除,没有就报错
s1= {1,2,3,4,5} s1.remove(1) print("输出:",s1) # 输出: {2, 3, 4, 5}pop () :
括号中不添加任何内容 ---s1.pop()
对集合进行不许排列,然后将左边的第一个元素删除
默认删除根据hash表排序后的第一个元素
discard () :
选择要删除的元素,有就会删除,没有则不会发生任何改变,即不会进行任何操作
s1= {1,2,3,4,5} s1.pop() s1.discard(5) s1.discard(6) print("输出:",s1) #输出: {2, 3, 4}
交集 &
含义:集合与集合 共有的部分;如果交集为空,返回空集 set()
并集 |
含义 :所有的都放一起,重复的不算(集合的唯一性)
s1= {1,2,3,4,5} s2= {4,5,6,7,8} s3={0,11,22} print("输出交集:",s1 & s2) #输出交集: {4, 5} print("输出交集:",s1 & s3) #输出交集: set() print("输出并集:",s1 | s2) #输出并集: {1, 2, 3, 4, 5, 6, 7, 8}