day07 ,08 元组,集合,字典

本文详细介绍了Python中的元组、集合和字典数据结构,包括它们的定义、特点、操作方法及示例。元组是不可变的有序序列,集合是无序且不允许重复的元素集合,字典则是一种通过键值对存储数据的结构。文中还讲解了字典的增、删、改、查操作及其相关操作和方法,包括字典的遍历、交集、并集、差集和对称差。最后,文章给出了相关的编程练习,如字符串检测、列表去重、集合操作等。

day07 ,08 元组,集合,字典

一,练习

  1. 输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)

    例如: ‘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("用户名非法")
    
  2. 写程序实现字符串函数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不在字符串一中")
    
  3. 生成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”,)

运算:

  1. 拼接,重复,

示例:

a=(1,)
b=(1,2)
print(a+b)   输出结果为(1, 1, 2)
print(a*3)   输出结果为(1, 1, 1)
  1. 大小比较

用法同列表比较方法

  1. 成员运算

in , not in

  1. 元组的遍历

直接遍历

for in

间接遍历

利用元组下标进行遍历

打包和解包:

  1. 打包操作

i=10,20,“abc”

将多个值赋予一个变量

  1. 解包操作

将元组中各元素赋值给不同变量

情况一:

 **元组长度等于变量数量**

示例:

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}
补充:

字典转换成列表:结果是将列表的键转换成元素

其他类型转换成字典:

                数据要求:本身为一个序列

                                    序列中的元素必须是有两个元素的小序列

                                   小序列的第一个元素是不可变的



字典作业:

  1. 定义一个变量保存一个学生的信息,学生信息包括:姓名、年龄、成绩(单科)、电话、性别
information={"name":"张三","age":18,"score":98,"Tle":"19113127523","gender":"男",}
print(information)
  1. 定义一个列表,在列表中保存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":"女"}]
  1. 统计不及格学生的个数
count=0
for i in information:
    if i["score"]<60:
        count+=1
print(count)
  1. 打印不及格未成年学生的名字和对应的成绩
for i in information:
    if i["age"]<18 and i["score"]<60:
        print(i["name"])
  1. 求所有男生的平均年龄
sum_age=0
count=0
for i in information:
    if i["gender"]=="男":
        sum_age+=i["age"]
        count+=1
print(int(sum_age/count))
  1. 打印手机尾号是8的学生的名字
list1=[]
for i in information:
    if i["Tle"][-1]=="3":
       list1.append(i["name"])
print(list1)
  1. 打印最高分和对应的学生的名字
 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"])                  
  1. 删除性别不明的所有学生
new_students=[stu for stu in stundents if "gender" in stu]
print(new_students)
  1. 将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)
students.sort(key=lambda x:x["age"])
  1. 定义一个变量保存一个班级的信息,班级信息中包括:班级名称、教室位置、班主任信息、讲师信息、班级所有的学生(根据实际情况确定数据类型和具体信息)

  2. 已知一个列表保存了多个狗对应的字典:

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': '母'}
]
  1. 利用列表推导式获取所有狗的品种

[‘银狐’, ‘法斗’, ‘土狗’, ‘哈士奇’, ‘银狐’, ‘土狗’]

list1=[]
for x in dogs:
    list1.append(x['breed'])
print(list1)
  1. 利用列表推导式获取所有白色狗的名字

[‘贝贝’, ‘可乐’]

list1=[]
for x in dogs:
    if x['color']=='白色':
        list1.append(x['name'])
print(list1)
  1. 给dogs中没有性别的狗添加性别为 ‘公’
for i in dogs:
    i.setdefault("gender",'公')
print(dogs)
  1. 统计 ‘银狐’ 的数量
count=0
for i in dogs:
    if i['breed']=='银狐':
        count += 1
print(count)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值