Day 9 元组和字符串
字典补充
- 字典不支持加法运算,乘法运算和比较大小
- in 和 not in 判断字典中的键是否存在
- len(字典) 求字典长度, 求字典中键的个数
- dict(数据) 强制转换成字典,数据本身必须是序列,容器型数据,同时序列中的元素必须两两成对的小序列
- 字典.clear() - 清空字典
- 字典.copy() - 复制字典,产生一个新列表并返回
- 字典.get() - 获取字典中键对应的值
- 字典.keys() - 获取字典的键,返回一个序列
- 字典.values() - 获取字典所有的值,返回一个序列
- 字典.items() - 获取字典所有的键值对,返回一个一个键值对对应的元组
元组
-
元组是容器型数据类型,将小括号作为容器的标志,里面多个元素用逗号隔开
t4 = (100,200,300,400)
-
元组是不可变的数据类型,元素的个数和元素的值是不可变的,不支持增删改
-
元组是有序的,顺序影响结果
-
任何类型的数据都可以作为元组中的元素
-
空元组,没有意义
-
只有一个元素的元组,必须在元素后面加一个逗号,没有歧义的情况下,元组()可以省略
-
元组有加乘,比较大小,in 和 not in
list2 = (1, 2, 3, 4) list3 = (2, 3, 4, 5, 6) print(list3 + list2) #(2, 3, 4, 5, 6, 1, 2, 3, 4) print(list2 > list3) #False 比较第一个不同的元素
-
相关函数 sum max min sorted len tuple表示强制转换
-
相关方法 元组.count(元素) 元组.index(元素),返回元素的下标
-
获取元组和列表中元素的另外一种方式
#让变量的个数和列表或者元组中元素的个数一致,来依次获取元组或者列表中的元素 list1 = [100, 200, 300] x, y, z = list1 print(x, y, z)
集合
-
集合是容器型数据,将{}作为容器的标志,里面多个数据用逗号隔开
-
集合是可变的(支持增删改)
-
集合是无序的,元素定位困难,集合作为容器使用,比较难,顺序不影响结果
print({10, 20, 30} == {20, 10, 30}) # True
-
集合对元素的要求,和字典对键的要求一样,不可变类型的数据,是唯一,元素是不可变的数据类型
-
集合数学运算
s1 = {1, 2, 5, 6, 8, 9, 7} s2 = {1, 5, 3, 8, 9, 10, 20, 35, 47} # 交集 求两个集合的公共部分 集合1 & 集合2 print(s1 & s2) # {8, 1, 5, 9} # 并集 将两个集合合并成1个集合 集合1|集合2 print(s1 | s2) # 差集 集合1去除集合2 也包含的部分 ,剩下的是差集 print(s1 - s2) # 对称差集 去掉两个集合公共部分,剩下部分是对称差集 print(s1 ^ s2) # 子集 和 真子集 不是比较大小 # 判断 集合是否是另一个集合的子集 print(s1 >= s2) #集合1 > = 集合2 判断集合2是否是集合1的子集
字符串
-
字符串是容器型数据类型,能同时存储多个文字符号
-
将单引号,双引号,三个单双引号作为容器的标志,和注释做区分
-
字符串是不可变的,有序的(有下标操作)
-
字符串中的每一个独立的符号都是字符串的元素,字符串的元素又叫字符,任何文字符号,都可以是字符串的元素
-
str = “”,定义空字符串,中间不能有空格
-
字符中的元素分为普通字符和转义字符
-
转义字符
""" \t - 水平制表符,一个tab键 \n - 换行 (enter键) \\ - 表示一个普通的反斜杠 \' - 表示一个普通的单引号杠 \" - 表示一个普通的双引号杠 """
-
r + 字符串 可以将字符串中所有的转义字符变成普通的字符
-
用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
a. 求选课学生总共有多少人
b. 求只选了第一个学科的人的数量和对应的名字
c. 求只选了一门学科的学生的数量和对应的名字
d. 求只选了两门学科的学生的数量和对应的名字
e. 求选了三门学生的学生的数量和对应的名字
Chinese = {"王八", "初七", "老六", "猪四", "小三", "熊二", "强大"} Math = {"王八", "初七", " 牛五", "老六"} Science = {"初七", "老六", "猪四", "小三", "熊二"} # a. 求选课学生总共有多少人 (只要选课,就收进去),,可以对多个集合进行并运算 print("选课总人数:", len(Chinese | Math | Science)) # b. 求只选了第一个学科的人的数量和对应的名字 only_first = Chinese - (Math | Science) print("只选了第一门学科的总人数为:", len(only_first), "分别是:", only_first) # c. 求只选了一门学科的学生的数量和对应的名字 only_one = (Chinese - (Math | Science)) | (Math - (Chinese | Science)) | (Science - (Math | Chinese)) print("只选了一门学科的总人数为", len(only_one), "分别是:", only_one) # d. 求只选了两门学科的学生的数量和对应的名字 just_two = (Chinese & (Math ^ Science)) | (Math & (Chinese ^ Science)) | (Science & (Math ^ Chinese)) print("只选两门学科的总人数为", len(just_two), "分别是:", just_two) # e. 求选了三门学生的学生的数量和对应的名字 all_tree = Chinese&Math&Science print("选了三门学科的总人数为", len(all_tree), "分别是:",all_tree)
-
获取列表中出现次数最多的元素
例如:nums = [1, 2, 3,1,4,2,1,3,7,3,3] —> 打印:3
nums = [1,2,2,1,3] --> 打印1、2
nums = [1,2,2,1,3] # nums = [1, 2, 3,1,4,2,1,3,7,3,3] counts_nums = [] nums_print =set() for i in nums: counts_nums.append(nums.count(i)) # print(counts_nums) max_meet = max(counts_nums) for i in range(len(counts_nums)): if counts_nums[i] == max_meet: nums_print.add(nums[i]) print(nums_print)
-
实现给定一个日期,判断这个日期是今年第几天的程序(尝试)
例如:2022/12/31 --> 今年第365天;2022/1/1 --> 今年第1天
# 实现给定一个日期,判断这个日期是今年第几天的程序(**尝试**) days_2022 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] print(len(days_2022)) some_day = "2022/01/01" day = int(some_day[-2:]) month = int(some_day[5:7]) year = some_day[:4] print(day) print(month) some_day_month =[] if month == 1: print(some_day ,"为",year,"年,第",day,"天.") else: for i in range(month-1): some_day_month.append(days_2022[i]) print(some_day, "为", year, "年,第", sum(some_day_month)+day, "天.")