Python学习笔记 5.0 元组 与 字典 与 集合 与 公共操作 与 推导式

元组

如果想要存储多个数据,但是这些数据是不能修改的数据,怎么办?
答:列表可以一次性存储多个数据,但是列表中的数据允许修改
一个元组可以存储多个数据,元组内的数据是不能修改的

一、定义元组

元组的特点:定义元组使用小括号,且逗号隔开各个数据,数据可以是不同的数据类型
在这里插入图片描述

t = (1)
print(t)			# 1
print(type(t))		# <class 'int'>

t = (1,)
print(t)			#(1,)
print(type(t))		# <class 'tuple'>

二、元组的常见操作

元组数据不支持修改,只支持查找,具体如下:
1、按下标查找数据:
在这里插入图片描述
2、index():查找某个数据,如果数据存在返回对应的下标,否则报错,语法和列表、字符串的index()方法相同。
在这里插入图片描述
3、count():统计某个数据在当前元组出现的次数。
在这里插入图片描述

三、元组数据的修改操作

注意:元组内的直接数据如果修改则立即报错

但是如果元组里面有列表,修改列表里面的数据则是支持的

t2 = ('aa', 'bb', ['cc', 'dd'])
print(t2[2])		# ['cc', 'dd']
print(t2[2][0])		# cc
t2[2][0] = 'TOM'
print(t2[2])		# ['TOM', 'dd']

字典

思考1:如果有多个数据,例如:’Tom’, ‘男’, ‘20’,如何快速储存?
答:列表 list1 = [‘Tom’, ‘男’, 20]
思考2:如何查找到数据’Tom’
答:查找到下标为0的数据即可。list1[0]
思考3:如果将来数据顺序发生改变,如下所示,还能用list[0]访问到数据’Tom’吗?
list1 = [‘男’, 20, ‘Tom’]
答:不能,数据’Tom’此时下标为2.
思考4:数据顺序发生改变,每个数据的下标也会随之改变,如何保证数据顺序变化前后能使用同一的标准查找数据呢?
答:字典,字典里面的数据是以键值对形式出现,字典数据和数据顺序没有关系,即字典不支持下标,后期无论数据如何变化,只需要按照对应的键的名字查找数据即可。

创建字典的语法

在这里插入图片描述
在这里插入图片描述
注意:一般冒号前面的为键(key) 简称k;冒号后面的为值(value),简称v。

字典的常见操作

1.增

写法:字典序列[key] = 值
注意,如果key存在则修改这个key 对应的值;如果key不存在则新增此键值对。
在这里插入图片描述
注意:字典为可变类型。

2.删

在这里插入图片描述

dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}

# del 删除字典或指定的键值对
del(dict1)
print(dict1)

在这里插入图片描述
字典dict1已经被删除了

dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}
del dict1['name']
print(dict1)		# {'age': 20, 'gender': '男'}
# 删除了键值对'name': 'Tom'以及中间的连接字符  ,

del dict1['names']
print(dict1)	
# 如果k不存在,便报错	
dict1.clear()		# clear():清空字典
print(dict1)        #{}

在这里插入图片描述

3.改

写法:字典序列[key] = 值
注意: 如果key存在则修改这个key对应的值;如果key不存在则新增此键值对。

dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}

dict1['name'] = 'lily'
print(dict1)			# {'name': 'lily', 'age': 20, 'gender': '男'}

4. 查

key值查找

在这里插入图片描述
如果当前查找的key存在,则返回对应的值;否则则报错。

get()

语法:
字典序列.get(key, 默认值)
注意:如果当前查找的key不存在则返回第二个参数(默认值),如果省略第二个参数,则返回
None。
在这里插入图片描述

# 2.2 keys()        # 查找字典中所有的key,返回可迭代带向
print(dict1.keys())


# 2.3 values()        查找字典中的所有的value,返回课迭代对象
print(dict1.values())
# 2.4 items()          
# 查找字典中所有的键值对,返回可迭代对象,里面的数据是元组,元组数据1是字典的key,元组数据2是字典的值
print(dict1.items())

在这里插入图片描述

字典的循环遍历

遍历字典的key(利用for)

dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}

for key in dict1.keys():
    print(key)
# name  age  gender

遍历字典的value

dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}

for value in dict1.values():
    print(value)
# Tom  20  男

遍历字典的元素

dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}

for item in dict1.items():
    print(item)

在这里插入图片描述

遍历字典的键值对

dict1 = {'name': 'Tom', 'age': 20, 'gender': '男'}

for value, key in dict1.items():
    print(f'{value} = {key}')

在这里插入图片描述

集合

一、创建集合

集合是可变类型
创建集合使用{} 或set(),但是如果要创造空集合之鞥你使用set(),因为{}用来创造空字典。

s1 = {10, 20, 30, 40, 50}
print(s1)
# {40, 10, 50, 20, 30}
# 集合没有顺序,所以没有下标操作

# 重复数据
s2 = {10, 10, 20, 30, 40}
print(s2)
# {40, 10, 20, 30}
# 自动去除重复数据

s3 = set('abcdefg')
print(s3)				# {'g', 'e', 'd', 'a', 'b', 'f', 'c'}
s4 = set('123456')
print(s4)				# {'2', '5', '1', '3', '4', '6'}
# 使用set()创建集合,会使()中的字符串自动分开。
# 123456必须要带上‘ ’,否则会报错,说明了set()函数内部只允许输入字符串

# 创造空集合只能使用set函数:
s6 = set()
s7 = {}
print(type(s6))			# <class 'set'>
print(type(s7))			# <class 'dict'>


集合没有顺序,所以没有下标操作

二、 集合常见操作方法

增加数据:add()

s1 = {10, 20}
s1.add(100)
s1.add(10)
print(s1)
# {100, 10, 20}
# 集合有去重功能,所以)并不会执行 s1.add(10) 此操作
# 此外,add函数不能增加序列否则会报错。

在这里插入图片描述

增加序列 update():追加的数据是序列。

s1.update([10, 20, 30, 40])
print(s1)
#{40, 10, 20, 30}

错误注意!
s1.update(100)
print(s1)
在这里插入图片描述
update(中只能存储序列)

a = [11]
s1.update(a)
print(s1)

# 如果是以字母进行输入会自动辨识为变量名,要求你提前定义,如上图a = [11]

remove():删除集合中的指定数据,如果数据不存在则报错。

ss = {10, 20, 30, 40, 50}

# remove(): 删除指定数据,如果数据不存在报错
ss.remove(10)
print(ss)
ss.remove(10)		# error
print(ss)

在这里插入图片描述
第一次print正常输出,第二次由于集合当中再也没有10这个元素了所以报错。

discard():删除集合中的指定数据,如果数据不存在也不会报错。

# discard(): 删除指定数据,如果数据不存在不报错
ss.discard(10)
print(ss)			# {40, 50, 20, 30}
ss.discard(10)
print(ss)			# {40, 50, 20, 30}

pop():随机删除集合中的某个数据,并返回这个数据。

(可以设立一个新的变量接受被删除的值)

del_num = ss.pop()
print(del_num)		 # 40
print(ss)			# {10, 50, 20, 30}

查找数据

in :判断数据在集合序列
not in:判断数据不在集合序列

sz = {10, 20, 30, 40, 50}
print(10 in sz)			#Ture

print(10 not in sz)		#False

公共操作

一、运算符

在这里插入图片描述

str1 = 'aa'
str2 = 'bb'

list1 = [1,2]
list2 = [3,4]

s1 = (1,2)
s2 = (3,4)

dict1 = {'name':'Tom'}
dict2 = {'age': 18}

# +:合并
print(str1+str2)
print(list1 + list2)
print(s1 + s2)
print(dict1 + dict2)

在这里插入图片描述
字典不支持 + 运算符 所以报错

print(str1 * 5)
print('-' * 10)
print(list1 * 5)
print(s1 * 5)

在这里插入图片描述
类似的,字典也不支持*运算符
in:
not in:

print('a' in str1)					# True
print('a' not in str1)				# False
print(1 in list1)					# True
print(1 not in list1)				# False
print(dict1.keys())					# dict_keys(['name'])	
print('name' in dict1.keys())		# True
print('name' in dict1.values())		# False

二、公共方法

在这里插入图片描述

len(), del

str1 = 'abcdefg'
lsst = [10, 20, 30, 40, 50]
t1 = (10, 20, 30, 40, 50)
s1 = {10, 20, 30, 40, 50}
dict1 = {'name': 'tom', 'age': 18}
# len()的使用
print(len(str1))	# 7
print(len(lsst))	# 5
del lsst[0]
print(lsst)
del lsst
print(lsst)

在这里插入图片描述
报错原因:del函数删除lsst之后,lsst列表消失了,print无法找到lsst列表,print要求重新定义一个lsst列表

min() 和 max()

str1 = 'abcdefg'
list1 = [10, 20, 30, 40, 50]

# max()
print(f'{max(str1)}')		# g
print(max(list1))			# 50

# min()
print(min(str1))			# a
print(min(list1))			# 10

range()

range(start,end,step)的使用:生成从start到end的数字,步长为step,供for循环使用
注意:range的使用方法和切片一样,左闭右开,即取得到start的数字取不到end的数字
默认步长为1,默认start为0;

for i in range(1, 10, 1):
    print(i, end=' ')			# 1 2 3 4 5 6 7 8 9
print()
for i in range(1, 10, 2):
    print(i, end=' ')			# 1 3 5 7 9
print()
for i in range(10):
    print(i, end=' ')			# 0 1 2 3 4 5 6 7 8 9
print()

enumerate()

语法
enumerate(可遍历对象, start = 0)
注意: start参数用来设置遍历数据的下标的起始值,默认为0。

list1 = ['a', 'b', 'c', 'd', 'e']
# enumerate 返回结果是元组,元组第一个数据是原迭代对象的数据对应的下标,元组第二个数据是原迭代对象的数据
for i in enumerate(list1):
    print(i)

在这里插入图片描述

for i in enumerate(list1, start=1):
    print(i)

在这里插入图片描述

for index,char in enumerate(list1):
    print(f'下标为{index},对应的字符为{char}')

在这里插入图片描述

三、 容器类型转换

# tuple():将某个序列转换成元组
# list():将某个序列转换成列表
# set():将某个序列转换成集合
list1 = [10, 20, 30, 40, 50, 20]
s1 = {100, 200, 300, 400, 500}
t1 =('a', 'b', 'c', 'd', 'e')
print(tuple(list1))
print(tuple(s1))
print(list(s1))
print(list(t1))
print(set(list1))
print(set(t1))

在这里插入图片描述
注意:1.集合可以快速完成列表去重
2.集合不支持下标

推导式

一、列表推导式

作用:用一个表达式创建一个有规律的列表或控制一个有规律列表。
列表推导式又叫列表生成式。

需求: 创建一个0-10的列表。

# While循环实现:
# 需求:0, 1, 2, 3, 4 ...
# 1.循环实现; 2.列表推导式(化简代码:创建或控制有规律的列表)
"""
1. 创建空列表
2. 循环将有规律的数据写入到列表

"""
list1 = []
i = 0
while i < 10:
    list1.append(i)
    i += 1
print(list1)		# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# for 循环实现-----
list1 = []
for i in range(10):
    list1.append(i)
print(list1) 		#同样的结果

# 列表推导式实现   放在中括号里表示的是列表推导式  在列表推导式里面读与写都从for循环开始
# 第一个i:i是整个列表推导式 列表里面要返回的数据 第二个i:是range10里面从0开始的到9为止的数

list1 = [i for i in range(10)]
print(list1)		#同样的结果

带if的列表推导式

需求:创建0-10的偶数列表

# 方法1:range()步长实现
list1 = [i for i in range(0, 10, 2)]
print(list1)
# [0, 2, 4, 6, 8]

# 方法2:if实现
list1 = [i for i in range(10) if i % 2 == 0]
print(list1)
# [0, 2, 4, 6, 8]

多个 for循环实现列表推导式

需求:创建列表如下:
[(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]

listt = []
for i in range(1, 3):
    for j in range(3):
        # 列表里面追加元组: 循环前准备一个空列表,然后这里追加元组数据到列表
        listt.append((i,j))
print(listt)



list1 = [(i, j) for i in range(1, 3) for j in range(3)]
print(list1)
# 多for 的列表推导式等同于for循环嵌套

二、字典推导式

思考:如果有如下两个列表:
list1 = [‘name’, ‘age’, ‘gender’]
list2 = [‘Tom’, 20, ‘man’]
如何快速合并为一个字典?
字典推导式作用: 快速合并列表为字典或提取字典中目标数据。

# 1.	创建一个字典:字典key是1-5数字,value是这个数字的2次方。
dict1 = {i: i**2 for i in range(1, 5) }
print(dict1)		#{1: 1, 2: 4, 3: 9, 4: 16}
# 2.	将两个列表 合并成为一个字典
dict1 = {list1[i]: list2[i] for i in range(len(list1))}
print(dict1)		#{'name': 'Tom', 'age': 20, 'gender': 'man'}
# 3. 提取字典中目标数据
counts = {'MBP': 268, 'HP': 125, 'DELL': 201, 'Lenovo': 199, 'acer': 99}
count1 = {key: value for key, value in counts.items() if value >= 200}
print(counts.items())
print(count1)
# dict_items([('MBP', 268), ('HP', 125), ('DELL', 201), ('Lenovo', 199), ('acer', 99)])
# {'MBP': 268, 'DELL': 201}

总结:

  1. 如果两个列表数据个数相同,len统计任何一个列表的长度都可以
  2. 如果两个列表数据个数不同,len统计数居多的列表数据个数会报错;len统计数据少的列表数据个数不会报错

三、集合推导式

需求:创建一个集合,数据为下方列表的2次方。
list = {1, 1, 2}

list1 = {1, 1, 2}
set1 = {i ** 2 for i in list1}
print(set1)				#{1, 4}

注意:集合有数据去重功能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值