day07 ,08 元组,集合,字典
一,练习
-
输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
例如: ‘abc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法
name=input("请输入一个用户名:") count=0 if "A"<=name[0]<="Z" and len(name)>1: for i in name[1:]: if "0"<=i<="9": count+=1 elif "a"<=i<="z"or"A"<=i<="Z": continue else: print("用户名非法") break else: result="合法" if count !=0 else"非法" print(result) else: print("用户名非法") -
写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)
例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8
str1="how are you? Im fine, Thank you!" str2="you" if str2 in str1: for i in range(0,len(str1)-len(str2)+1): # 防止下标越界产生, if str1[i:i+len(str2)]==str2: print(i) break else: print("字符串2不在字符串一中") -
生成50-300之间可重复的 10个数据 存放于列表中, 保证列表中元素的顺序,对列表进行排重,并对列表使用排序算法进行降序排序
例如:随机生成了[70, 88, 91, 70, 107, 234, 91, 177, 282, 197] --- 去重之后 [70, 88, 91, 107, 234, 177, 282, 197] ---- 降序排序 [282, 234, 197, 177, 107, 91, 88, 70]# 生成10个任意数据 import random list1=[random.randint(50,300) for _ in range(10)] print(list1) # 去重 list2=[] for i in list1: if i not in list2: list2.append(i) print(list2) # 排序 for i in range(1,len(list2)): for j in range(0,len(list2)-1): if list2[j]<list2[j+1]: list2[j],list2[j+1]=list2[j+1],list2[j] print(list2)列表去重:
从左向右去重;
list="A,C,A,B,C,A,B," index=0 while index<=len(list[list])>1: if list.count(list[index])>1: del list[index] else: index+=1 print(list)从右向左去重:
list="A,C,A,B,C,A,B," for i in range(len(list)-1,-1,-1): if list,count(list[i])>1: del list[i] print(list)二,字符串检测方法
isdigit( )----------------检测字符串是不是由字符组成
**isalnum( )---------检测字符串是不是只由数字或者字母组成** **isalpha( )----------检测字符串是不是只由字母组成** **startswith()----------检测字符串的头部是不是指定字符串** **endswith()----------检测字符串的尾部是不是指定字符串**
示例:
str=“123456”
print(stir.isdigit())
三,元组
定义:按照给定顺序保存一定数据的序列
性质:有序性
**不可变数据类型**
写法:tuple( )使用小括号存储元素,元素间使用逗号间隔
一元组:
S2=(“a”,)
运算:
- 拼接,重复,
示例:
a=(1,)
b=(1,2)
print(a+b) 输出结果为(1, 1, 2)
print(a*3) 输出结果为(1, 1, 1)
- 大小比较
用法同列表比较方法
- 成员运算
in , not in
- 元组的遍历
直接遍历
for in
间接遍历
利用元组下标进行遍历
打包和解包:
- 打包操作
i=10,20,“abc”
将多个值赋予一个变量
- 解包操作
将元组中各元素赋值给不同变量
情况一:
**元组长度等于变量数量**
示例:
i=10,20,"abc"
a,b,c=i
情况二:
**元组长度不等于变量数量**
**如果变量数少于元组数,可引入星号**
**示例;**
x,*y,z=(1,2,3,4)
print(x,y,z)
注意:变量个数多于元素个数不能进行解包操作
下标,切片同列表,字符串用法
四,集合
python中的集合形同于数学中
定义:使用花括号将元素包围起来的容器
性质:
**确定性:一个元素只有属于或者不属于集合两种情况**
**无序性:集合中的元素无先后,无下标,地位相等**
**互异性; 一个集合中某一个元素不能重复出现**
创建空集合:
a=set( )
向集合中添加元素:
集合点add( )
集合点update( )
示例:
a=set()
a.add("python")
a,update({"java","c","c++"})
删除;
pop( ):随机删除
清空:
clear( ) 清空
集合的交,差,并,对称差
str1={1,3,5,6,7,8}
str2={1,3,7,8}
交集:
print(str1&str2)
并集:
print(str1|str2)
差集:
print(str1-str2)
对称差:
print(str1^str2)
子集,真子集,超集
str1={1,3,5,6,7,8}
str2={1,3,7,8}
子集:str1<str2 真子集
超集:>
集合的遍历:
集合只有直接遍历
集合中的元素
集合中的元素不能是无序的数据类型
五,字典
定义:
**容器形数据类型,将{ }作为容器的标志,其中多个元素用逗号隔开,**
注意:
**键必须是不可变数据类新,键是唯一的,多个情况下最后一个值有效**
**值没有要求,可以为任何数据类型**
字典的遍历:(遍历依次取到的是字典所有的键)
**fr 变量 in 字典:**
**循环体**
六,字典的增,删,改,查
查:
查单个
dict[键]-----------获取建对印的值,不存在报错
dict.get(键)--------获取建对印的值,不存在返回None
dict.get(键,默认值-)-------获取指定键对应的值,键不存在返回默认值
遍历:
for 变量 in 字典---------获取到字典的每个键
改:(如果键不存在即为添加键值对,如果存在即为修改键值对)
dict[键]=新值
增:
dict.setdefault(键,值)------- 添加键值对,键不存在则添加,键存在不修改
删:
del 字典[键]-------------删除指定键对应的值
dict.pop[键]-----------取出对应的键对应的值
七,字典相关操作和方法
1,相关操作(字典不支持 +,*,比较大小)
in 和 not in
注意:判断的是是否存在指定的键
字典相关函数
len(dict)------
list(dict)------将字典的键转换成列表
dict(数据)-------字典类型转换,
数据本身是一个序列,
序列中元素必须是有两个元素的小序列
小序列的每个元素是不可变的小序列
类似 : print(dict{"ab",(10,20),["age",10],range(2)})
dict.clear()------------将字典清空
dict.copy()--- ----------将字典重新复制一个
dict.keys()-------------返回一个序列,序列中元素为所有的键
dict.values()-----------返回一个序列,序列中元素为所有的值
dict.items()------------返回一个序列,序列中的元素是由每一对键值组成的元组
类似: for key,value in dog.items()
dict1.update(dict2)--------将字典2中的所有键值对添加到字典1中
字典推导式
{表达式1:表达式2 for 变量 in 序列}
{表达式1:表达式2 for 变量 in 序列 if 条件语句}
类似:
result-{x:x*2 for x in range(100) if x%2==0}
补充:
字典转换成列表:结果是将列表的键转换成元素
其他类型转换成字典:
数据要求:本身为一个序列
序列中的元素必须是有两个元素的小序列
小序列的第一个元素是不可变的
字典作业:
- 定义一个变量保存一个学生的信息,学生信息包括:姓名、年龄、成绩(单科)、电话、性别
information={"name":"张三","age":18,"score":98,"Tle":"19113127523","gender":"男",}
print(information)
- 定义一个列表,在列表中保存6个学生的信息(学生信息中包括: 姓名、年龄、成绩(单科)、电话、性别(男、女、不明) )
information=[{"name":"张三","age":18,"score":98,"Tle":"19113127523","gender":"男"},
{"name":"李四","age":19,"score":95,"Tle":"19113152684","gender":"女"},
{"name":"王五","age":17,"score":56,"Tle":"19113514323","gender":"男"},
{"name":"刘六","age":20,"score":58,"Tle":"19115617523","gender":"女"},
{"name":"二狗","age":21,"score":68,"Tle":"19175627523","gender":"男"},
{"name":"三蛋","age":16,"score":98,"Tle":"19145781523","gender":"女"}]
- 统计不及格学生的个数
count=0
for i in information:
if i["score"]<60:
count+=1
print(count)
- 打印不及格未成年学生的名字和对应的成绩
for i in information:
if i["age"]<18 and i["score"]<60:
print(i["name"])
- 求所有男生的平均年龄
sum_age=0
count=0
for i in information:
if i["gender"]=="男":
sum_age+=i["age"]
count+=1
print(int(sum_age/count))
- 打印手机尾号是8的学生的名字
list1=[]
for i in information:
if i["Tle"][-1]=="3":
list1.append(i["name"])
print(list1)
- 打印最高分和对应的学生的名字
max_scores=students[0]["score"]
names=[students[0]["name"]]
for stu in students[1:]:
if stu["score"]>max_scores:
max_scores=stu["score"]
names.clear()
names.append(stu["name"])
elif stu["score"]==max_scores:
names.append(stu["name"])
- 删除性别不明的所有学生
new_students=[stu for stu in stundents if "gender" in stu]
print(new_students)
- 将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)
students.sort(key=lambda x:x["age"])
-
定义一个变量保存一个班级的信息,班级信息中包括:班级名称、教室位置、班主任信息、讲师信息、班级所有的学生(根据实际情况确定数据类型和具体信息)
-
已知一个列表保存了多个狗对应的字典:
dogs = [
{'name': '贝贝', 'color': '白色', 'breed': '银狐', 'age': 3, 'gender': '母'},
{'name': '花花', 'color': '灰色', 'breed': '法斗', 'age': 2},
{'name': '财财', 'color': '黑色', 'breed': '土狗', 'age': 5, 'gender': '公'},
{'name': '包子', 'color': '黄色', 'breed': '哈士奇', 'age': 1},
{'name': '可乐', 'color': '白色', 'breed': '银狐', 'age': 2},
{'name': '旺财', 'color': '黄色', 'breed': '土狗', 'age': 2, 'gender': '母'}
]
- 利用列表推导式获取所有狗的品种
[‘银狐’, ‘法斗’, ‘土狗’, ‘哈士奇’, ‘银狐’, ‘土狗’]
list1=[]
for x in dogs:
list1.append(x['breed'])
print(list1)
- 利用列表推导式获取所有白色狗的名字
[‘贝贝’, ‘可乐’]
list1=[]
for x in dogs:
if x['color']=='白色':
list1.append(x['name'])
print(list1)
- 给dogs中没有性别的狗添加性别为 ‘公’
for i in dogs:
i.setdefault("gender",'公')
print(dogs)
- 统计 ‘银狐’ 的数量
count=0
for i in dogs:
if i['breed']=='银狐':
count += 1
print(count)
本文详细介绍了Python中的元组、集合和字典数据结构,包括它们的定义、特点、操作方法及示例。元组是不可变的有序序列,集合是无序且不允许重复的元素集合,字典则是一种通过键值对存储数据的结构。文中还讲解了字典的增、删、改、查操作及其相关操作和方法,包括字典的遍历、交集、并集、差集和对称差。最后,文章给出了相关的编程练习,如字符串检测、列表去重、集合操作等。
834

被折叠的 条评论
为什么被折叠?



