元组 tuple
基本格式:元组名 = (元素1, 元素2, 元素3...)
定义元组时,如果只有一个元素,末尾要加逗号,否则返回唯一的值的数据类型
多个元素用逗号隔开,不同元素也可以是不同的数据类型
元组和列表的区别
元组只有一个元素末尾必须加逗号,列表不需要;
元组只支持查询操作,不支持增删改操作
元组也有下标,从左往右,从0开始
count()、index()、len()跟列表的用法相同
应用场景
函数的参数和返回值
格式化输出后面的()本质上就是一个元组
数据不可以被修改,保护数据的安全
name = 'abcdabcd'
age = 18
print("%s的年龄是: %d" % (name, age)) # abcdabcd的年龄是18
info = (name, age)
print(type(info)) # <class 'tuple'>
print("%s的年龄是: %d" % info) # abcdabcd的年龄是18
字典 dict
基本格式:字典名 = {键1: 值1, 键2: 值2...}
键值对形式保存,键和值之间用冒号隔开,每个键值对之间用逗号隔开
键具有唯一性,但是值可以重复
dic = {'name': 'abcdabcd', 'name': 'efghefgh'}
print(dic) # 不会报错,键名重复前面的值会被后面的值覆盖
常见操作
查看元素
变量名[键名]
不可以根据下标,字典中没有下标,查找元素需要根据键名,键名相当于下标,键名不存在会报错
变量名.get(键名, k)
键名不存在默认返回None,可以通过k设置键名不存在的返回值
修改元素
变量名[键名] = 值
列表通过下标修改,字典通过键名修改
添加元素
变量名[键名] = 值
键名存在就修改,不存在就新增
删除元素
del
删除整个字典,格式:del 字典名
删除指定键值对,键名不存在就会报错,格式:del 字典名[键名],没有指定的键名就会报错
clear()
清空整个字典里面的东西,但保留了这个字典
pop()
格式:pop(键名)
删除指定键值对,键不存在就会报错
不写键名会报错
popitem()
# 3.7之前的版本是随机删除一个键值对,3.7之后的版本默认删除最后一个键值对
求长度len()
格式:len(字典名)
返回键值对的个数
keys()
格式:字典名.keys()
返回字典里面包含的所有键名
values()
返回字典里面包含的所有值
items()
返回字典里面包含的所有键值对,键值对以元组形式
字典的应用场景
使用键值对,存储描述一个物体的相关信息
集合 set
基本格式:集合名 = {元素1, 元素2, 元素3...}
s1 = {} # 定义空字典
s2 = set() # 定义空集合
集合具有无序性
# s1 = {'a', 'b', 'c', 'd', 'e', 'f'}
# print(s1) # 每次运行结果都不一样
# s2 = {1, 2, 3, 4, 5, 6}
# print(s2) # 数字运行结果一样
# 集合无序的实现方式涉及hash表
print(hash('a'))
print(hash('b'))
print(hash('c'))
# 每次运行结果都不同,hash值不同,那么在hash表中的位置也不同,这就实现了集合的无序性
print(hash(1)) # 1
print(hash(2)) # 2
print(hash(3)) # 3
# python中int整型的hash值就是它本身,在hash表中的位置不会发生变化,所以顺序也不会改变
集合具有唯一性,可以自动去重
集合常见操作
添加元素
add() 添加的是一个整体
s2 = {1, 2, 3, 4}
print("原集合:", s2)
# 集合的唯一性,决定了如果需要添加的元素在原集合中已经存在,就不进行任何操作
# s2.add(1) # {1, 2, 3, 4}
# s2.add(5) # {1, 2, 3, 4, 5}
# s2.add(5, 6) # 一次只能添加一个元素
s2.add((5, 6)) # {1, 2, 3, 4, (5, 6)}
print("现集合:", s2)
update()
把传入的元素拆分,一个个放进集合中,元素必须是能够被我们for循环取值的可迭代对象
s2 = {1, 2, 3, 4}
print("原集合:", s2)
# s2.update(567) # 报错
# s2.update('567') # {1, 2, 3, 4, '6', '7', '5'} 顺序随机
# s2.update([5, 6, 7]) # {1, 2, 3, 4, 5, 6, 7}
s2.update((5, 6, 7)) # {1, 2, 3, 4, 5, 6, 7}
print("添加后:", s2)
删除元素
remove: 选择删除的元素,如果集合中有就删除,没有就会报错
pop: 对集合进行无序排列,将左边第一个元素删除。默认删除根据hash表排序后的第一个元素
discard: 选择要删除的元素,有就会删除,没有则不会发生任何改变,不会进行任何操作
交集和并集
交集 &
共有的部分
没有共有的部分返回空集合set()
并集 |
所有的都放在一起,重复的不算(集合的唯一性)
类型转换
int():
转换为一个整数,只能转换由纯数字组成的字符串
浮点型强转整型会去掉小数点及后面的数值,只保留整数部分
如果字符串中有数字和正负号(+/-)以外的字符就会报错
+/-写在前面表示正负号,不可以写在后面
input默认输入的是字符串类型
float()
转换为一个小数
整型转换为浮点型,会自动添加一位小数
如果字符串中有正负号、数字和小数点以外的字符,则不支持转换
str()
转换为字符串类型,任何类型都可以转换成字符串类型
float转换成str会去除末位为0的小数部分
# st = str(-1.80) # -1.8
# st = str(-1.000) # -1.0
st = str(-1.0) # -1.0
eval()
用来执行一个字符串表达式,并返回表达式的值
print(10 + 10) # 20
print('10' + '10') # 1010
print('10+10') # 10+10
print(eval('10+10')) # 20 执行运算并返回运算值
print(eval("10+'10'")) # 报错,整型和字符串不可以相加
eval()可以实现list、dict、tuple和str之间的转换
# str -> list
st1 = "[[1, 2], [3, 4], [5, 6]]"
print(type(st1)) # <class 'str'>
li = eval(st1)
print(li, type(li)) # [[1, 2], [3, 4], [5, 6]] <class 'list'>
# str -> dict
st2 = "{'name':'abcd','age':18}"
dic = eval(st2)
print(dic, type(dic)) # {'name':'abcd','age':18} <class 'dict'>
eval()非常强大,但是不够安全,容易被恶意修改数据,不建议使用
list()
将可迭代对象转换为列表
支持转换为list的类型:str、tuple、dict、set
集合转换成列表会先去重,再转换