day09 元组和集合

day09 元组和字典

一、作业修改

1、07(2)作业

4、已知一个数字列表,写程序判断这个列表时候是连续递增列表。

list1 = [1, 2, 3,7, 5]
if list1==sorted(list1):
    print('list1是连续递增')
else:
    print('list1不是连续递增')
  • 从第二个元素开始往后取,分别与前面元素比较
for i in range(1,len(list1)):
    if list1[i]>list1[i-1]:
        print('list1不是连续递增')
        break
else:
    print('list1是连续递增')

5、已知两个列表,将两个列表按照下面的规律交叉合并

  • 方法 1 insert操作超过下标时,插入到最后
A = [10, 20, 30, 40, 50]
B = [100, 200, 300]
count1,count2=len(A),len(B)
for i in range(count2):
    A.insert(2*i+1,B[i])
print(A)
  • 方法2 pop()
C=[]
while True:
  C.append(A.pop(0))
  C.append(A.pop(0))
  if A==[]or B==[]:
      break;
C+=A+B
print(C)

2、08作业

1.获取手机号最后一位

for i in stu:
    if i.get('tel')[-1]=='8':
        print(i.get('name'))

2、最高分考虑多个人最高分,先找最高分。再找分为最高分的学生

max1=stu[0]['scores']
j=0
print(max1)
for i in stu[1:]:
    score=i['scores']
    if score>max1:
        max1=score
result=[print(i['name'],i['scores'])for i in stu if i['scores']==max1]

方法1.键第一个学生设为最高分,(最高分不止一个),
当前分数小于最高分,更新最高分,清除name列表,添加最该分对应的学生姓名、
当前分数等于最高分,添加学生姓名到name列表

name=[stu[0]['name']]
max1=stu[0]['scores']
for i in  stu:
    score=i['scores']
    if score>max1:
        max1=score
        name.clear()
        name.append(i['name'])
    elif score==max1:
        name.append(i['name'])
print(max1,name)

3、将列表按学生成绩从大到小排序(挣扎一下,不行就放弃)

stu.sort(reverse=True,key=lambda stu:stu['scores'])
print(stu)

二、字典相关操作

1、相关操作

  • 字典不支持加、乘、比较、运算

  • 字典的in 和 not in

    判断字典中是否存在指定的键,不是判断值

dict1={'a':10,'b':19,'c':22}
print(10 in dict1)      #False
print( 'a' in dict1)        #True

2、相关函数

  • 注意:

    • 对字典sum操作是求键的和
    • max,min 是求最小键
  • len(字典) - 获取字典长度

print(len(dict1))
  • dict(数据) - 其他数据转换从字典
    • 对转换的数据要求:
      • 数据必须是序列
      • 序列中元素必须是有且仅有两个元素的小序列(字典元素由键和值组成)
data=[[10,19],[13,24],[90,100]]
print(dict(data))    # {10: 19, 13: 24, 90: 100}

data2=['ab','cd','ef']
print(dict(data2))      # {'a': 'b', 'c': 'd', 'e': 'f'}

data3=[[10,20],'ab',range(2)]
print(dict(data3))      # {10: 20, 'a': 'b', 0: 1}
  • 元组转换成字典:
data4=[('name','小明'),('age',18)]
  • list(字典) - 将字典转换成列表

    将字典中所有的键作为列表的元素

dog = {'name': 'lily', 'age': 3, 'color': 'black', 'breed': '土狗'}
list(dog)
print(list(dog))        # ['name', 'age', 'color', 'breed']

3、字典相关方法 - 字典.xxx()

  • 字典.clear() - 清空字典

  • 字典.copy() - 复制一个字典返回一个新字典

  • 查值:

    • 字典.keys() - 获取所有的键
    • 字典.values() - 获取所有的值
    • 字典.items() - 将字典转换成一个序列,序列中每个元素是每个键值对对应的元组
print(dict1.keys())
print(dict1.values())
print(dict1.items())
  • 字典1.update(字典2) - 将字典2中所有键值对添加在字典1中

    出现相同的键,键对应的值更新

dict1={'a':10,'b':19,'c':22}

dict1.update({100:10,'a':22})
print(dict1)    # {'a': 22, 'b': 19, 'c': 22, 100: 10}

三、元组

1、什么是元组

  • 元组是序列容器型数据类型

    • 将()作为容器标志,里面多个元素用逗号隔开
    • (数据1,数据2,…)
  • 元组不可变(不支持增删改)

    • ​ 元素个数、值都不能变
  • 元组是有序的

    • 顺序影响结果,支持下标操作
  • 元素要求

    • 任何数据类型的数据都可以作为元组的元素

​ 1)、空元组

t = ()
print(t)

​ 2)、只有一个元素的元组,必须在唯一的元素后加逗号

t1 = (100)  # 括起来表示一个整体,
print(type(t1))  # <class 'int'>
t2 = (100,)
print(type(t2))  # <class 'tuple'>

​ 3)、正常的元组

t3 = (1, 'a', True)

​ 4)在没有歧义的情况下元组的()可以省略 - 直接将多个数据用逗号隔开,也是一个元组

t4 = 10, 12, 33, 78
print(t4)  # (10, 12, 33, 78)

​ 5)函数返回元组

# return 100,2000

2、元组的使用

  • 使用元组的实际情况:

    • 一般不会主动使用元组保存多个数据,
    • 但是遇到元组时必须会使用元组
  • 组是不可变的列表

    • 列表相关操作应用中,除了可变相关内容,其他元组都支持,
  • 获取元素,列表咋样获取,元组就咋样

t5 = ('狂飙', '黑暗荣耀', '回家的诱惑', '三国演义', '琅琊榜', '甄嬛传')
print(t5[0], t5[4])  # 获取单个元素

​ 切片

print(t5[1:-1])
print(t5[0::2])

​ 遍历

for i in range(len(t5)):
    print(i, t5[i])

for i in t5:
    print(i)

for index, valu in enumerate(t5):
    print(index, valu)
  • 加法、乘法、比较、in 和not in - 和列表一样

  • 相关函数

    • sum,max,min,sorted,len,
    • tuple() - 将序列中的元素转换成元组的元素,规则与列表一样
  • 相关方法:

    • 元组.count(元素) - 统计元素个数
    • 元组.index(元素) - 获取元素下标值
  • 补充:

    • 让变量的个数与元组或者列表中的元素保持一致,来依次获取列表或元组中的元素(数据较少时使用)
list1 = [100, 200, 300]
x, y, z = list1
print(x, y, z)

t1 = (10, 20, 30)
i, j, k = t1
print(i, j, k)
  • 应用

​ 1)x包含下标和元组的元素

for x in enumerate(list1):
    print(x)
# (0, 100)
# (1, 200)
# (2, 300)python

​ 2)enumerate两个变量分别获取下标和元素

for index ,item in enumerate(list1):
    print(index ,item)
# 0 100
# 1 200
# 2 300

​ 3)变量的个数与元组或者列表中的元素保持一致

list1=[('小明',18,'男'),('小花',18,'女'),('小华',20,'男')]
for name,age,gender in list1:
    print(name,age,gender)
# 小明 18 男
# 小花 18 女
# 小华 20 男

四、集合

1、什么是集合(和数学一回事)

  • 集合是容器型数据类型;

    • 将{}作为容器的标志,里面多个数据用逗号隔开
    • {数据1,数据2,数据3…}
  • 集合是可变的(支持增删改)

  • 集合是无序的(不支持下标操作,顺序不影响结果)

  • 对元素的要求:

    • 不可变数据类型(和字典对键的要求一样)
    • 元素是唯一的

​ 1)、空集合

s1 = set()
print(s1, type(s1), len(s1))

​ 2)、无序性

print({10, 20, 40, } == {10, 40, 20})  # True

​ 3)、集合的元素必须是不可变类型的数据

s2 = {'abc', 10, True, (10, 20)}
# s2={'abc',10,True,[10,20]}      # TypeError: unhashable type: 'list'

​ 4)集合元素的唯一性(自带去重功能 - 所有序列可转换成集合)

s3 = {10, 20, 40, 10, 20}
print(s3)  # {40, 10, 20}

2、数学集合运算(交、并、差集、对称差集、子集、真子集)

  • 交集 - 两个集合的公共部分

    集合1 & 集合2

s1 = {1, 2, 3, 4, 5, 6, 7, 8}
s2 = {5, 6, 7, 8, 9, 10, 11}        #{8, 5, 6, 7}
print(s1 & s2)
  • 并集 - 两个集合合并成一个集合

    集合1 | 集合2

print(s1|s2)        # {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
  • 差集 - 集合1 -集合2,求的是集合1去掉公共部分的剩下的部分

    集合1 -集合2

print(s1-s2)    # {1, 2, 3, 4}
print(s2-s1)    # {9, 10, 11}
  • 对此差集 - 结果是取掉集合1和集合2取掉公共部分剩下的部分

    集合1 ^集合2

print(s1^s2)    # {1, 2, 3, 4, 9, 10, 11}
  • 子集

    {1,2,3,}的子集{}、{1}、{2}、{3}、{1,2}、{1,3}、{3,2},{1,2,3}

    集合1 >= 集合2 - 判断集合2是否是集合1的子集

    集合1 <=集合2 - 判断集合1是否是集合2的子集

print({1}<={1,2,3})     # True
  • 真子集

    {1,2,3,}的真子集{}、{1}、{2}、{3}、{1,2}、{1,3}、{3,2}

    集合1 > 集合2 - 判断集合2是否是集合1的真子集

    集合1 <集合2 - 判断集合1是否是集合2的真子集

print({1}<{1,2,3})  # True
print({1,3,5}>{1,2,3})  # False

五、字符串

1、什么是字符串

  • 字符串是容器型数据类型(同时保存多个文字符号);

    • 将单引号、双引号或者三个单引号或者三个单引号作为容器的标志
    • 里面的每一个符号都是字符串的元素
    • 单引号双引号里面的字符串不能换行,但是三个双引号或者三个双引号可以换行
  • 字符串不可变;字符串有序

  • 字符串的元素:

    • 字符串引号中每一个独立的符号都是字符串的元素,字符串的元素又叫字符;
    • 任何文字符号都可以是字符串的元素(中文符号、英文符号、韩日语、表情符号……)**单引
msg = 'aaa\nbbb'
print(msg)

def fun():
    """说明文档"""

class A:
    """ 说明文档"""

str1 = 'abc'
print(str1.upper())  # 是创建了一个新的字符串,不是修改

str2 = 'mk,1,五,哈哈😊🤩🤔🥰'
print(str2)

​ 1)空串 - 引号中啥也没有(引号中有空格是不是空串)

str3 = '  '
print(len(str3))

2、字符 - 字符串中每一个独立的符号

  • 普通字符 - 在字符串中表示符号本身的字符就是普通字符
  • 转义字符 - 在字符串中有特殊意义或者特殊功能的符号就是转义字符(在特定的符号前加 \ 来表示特殊意义或者功能)

3、转义字符

\n -   换行
\t -   水平制表符(摁一次tab键)
\\ -   表示普通的反斜杠
\' -   表示普通的单引号
\"  -   表示普通的双引号
str3='it\'s ok!'
print(str3)

str4="it's ok!"
print(str4)

str5='i say:"good good study!"'
print(str5)

str6="i say:\"good good study!\""
print(str6)
  • r字符串

    在字符串引号前面加r或者R,可以让所有转义字符功能失效(让所有字符都变成普通字符)

str6='\nac\t'
print(str6)

str6=r'\nac\t'
print(str6)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值