day8总结 元组和集合
一、元组
1.什么是元组
类型名:(tuple)
元组是容器(序列),将()作为容器的标志,里面多个元素用逗号隔开:(元素1,元素2,元素3…)
不可变的(不支持增删改),有序的(支持下标的相关操作)
元素的要求和列表一样(元组就是不可变的列表)
t1 = (10, 20, True, 'abc')
print(t1, type(t1))
2.查
列表获取元素的方法元组都支持
t2 = ('周一', '周二', '周三', '周四','周五')
print(t2[1])
print(t2[2:])
print(t2[:4:-1])
3. 元组特有或者常用的一些操作
- 只有一个元素的元组:必须在唯一的元素后面加逗号
t3 = (10,)
print(t3, type(t3))
- 多个元素在没有歧义的情况下,元组的小括号可以直接省略。
t5 = 10, 20, 30
print(t5, type(t5))
- 可以通过让变量的个数和元组中元素的个数保持一致,来获取元组中的每个元素
point = (20, 10,30)
x, y,z = point
print(x, y, z)
- 可以让变量的个数小于元组元素的个数但是必须在其中的一个变量前加* 取值的时候先让不带的变量按照顺序先取,剩下的元素以列表的形式返回给带的变量
t2 = ('小明', 18, 98, 78, 67, 45)
x1, *x2 = t2
print(x1, x2)
x1, *x2, x3 = t2
print(x1, x3, x2)
二、集合
1. 什么是集合
类型名:set
集合是容器也是序列,是将{}作为容器的标志,里面多个元素用逗号隔开:{元素1,元素2,元素3}
集合是可变的,无序的。
对元素要求:不可变数据,唯一的
x = {} # 是空字典
s = set() # 空集合:
print(type(s), len(s))
s2 = {10, True, 'abc', (1, 2)} # 元素是不可变数据
print(s2)
# s3 = {10, True, 'abc', [1, 2]} -- 元素[1 ,2] 为可变数据 , 会报错
print({1, 2, 3} == {1, 3, 2}) # 元素无序
# 元素唯一性:
s3 = {1, 2, 1, 3, 3, 1, 2}
print(s3) # 集合自带去重功能
2. 数学集合运算:交集,并集,差集,对称差集,子集和真子集
s1 = {1, 2, 3, 4, 5, 6, 7}
s2 = {5, 6, 7, 8, 9}
- 交集(&) – 求两个集合的公共部分
result = s1 & s2
print(re
- 并集(|) — 合并两个集合
result = s1 | s2
print(resu
- 差集 (—) — 集合1—集合2 = 集合1中除了集合2以外的部分
result = s1 - s2
print(result) # {1, 2, 3, 4}
result = s2 - s1
- 对称差集(^) — 两个集合合并,然后去掉公共部分
result = s2 ^ s1
print(result)
3.用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)
a. 求选课学生总共有多少人
b. 求只选了第一个学科的人的数量和对应的名字
c. 求只选了一门学科的学生的数量和对应的名字
d. 求只选了两门学科的学生的数量和对应的名字
e. 求选了三门学生的学生的数量和对应的名字
python = {'stu1', 'stu4', 'stu5', 'stu6', 'stu8', 'stu10', 'stu11'}
java = {'stu2', 'stu4', 'stu7', 'stu8', 'stu9', 'stu10'}
h5 = {'stu1', 'stu3', 'stu7', 'stu8', 'stu10', 'stu11'}
# a
result = python | java | h5
print(len(result))
# b
result2 = python - (java | h5)
print(result2, len(result2))
# c
result4 = python & java & h5
result3 = python ^ java ^h5 - result4
print(result3, len(result3))
# d
result4 = python & java & h5
result5 = result - result3 - result4
print(result5,len(result5))
# e
result4 = python & java & h5
print(result4,len(result4))
三、字符串
1.什么是字符串
类型名:(str)
字符串是容器(序列),将’’、 “”、 ‘’’’’’、 “”""""、作为容器的标志,在引号中的每一个符号都是字符串的元。
(字符串的元素又叫字符)
字符串是不可变的(所有字符串相关的可变操作都是产生了一个新的字符串)
字符串是有序的。
字符串的元素要求:任何能输入进引号里的都可以是字符串的元素 --数字、字母、标点符号、文字、空格
‘’和"" 没有区别 ,内容都不能换行
‘’‘ ’‘’ 和“”“ ”“” ,内容可以换行
2. 字符
- 字符分文普通字符和转义字符两种
- 转义字符 --------- 在一些特定的符号前面加\ 在字符串中来表示一些具有特殊功能或者特殊意义的符号
\n ---- 换行
\t ------- 水平制表符,相当于按Tab一次
\‘ ------- 表示一个单引号
\“ ------- 表示一个双引号
\ \ ------ 表示一个反斜杠
# \u四位的十六进制编码值 -- 将编码值转换成对应的字符
str1 ='abc\u4e80123'
print(str1)
四、字符编码
1. 字符在计算机中的储存问题
计算机只能存储数字,所以为了能够保证字符,给每一个字符对应一个固定的数字。每次需要保存字符的时候直接保存字符对应的那个数字。
一个字符对应的那个固定的数字就是这个字符的编码值。
2. 编码表
记录字符和编码值之间一一对应关系的表。
常见的编码表有两种:ASCII表和Unicode编码表。
ASCII码表
总共有128个字符。
表中数字字符在大写字母前面,大写字母在小写字母前面,大写字母和小写字母之间间隔了其他符号。
- Unicode编码表
是对ASCII码表的扩充,他记录了世界上所有的国家所有的名族所有的语言的所有的符号
中文的编码范围:4e00 ~ 9fa5 (16进制数)
- 编码值的使用
(1)\u 编码值(4位十六进制)
print('\u4e00') # 一
(2)chr (编码值) ----- 获取编码值对应的字符
for x in range(0x4e00, 0x9fa5):
print(chr(x)) #所有的汉字
(3) ord(字符) – 获取字符对应的编码值
print(ord('陈'), ord('佐'))
print(hex(ord('陈')), hex(ord('佐'))) # 0x9648 0x4f50 hex(转换成16进制)
(4)字符串比较大小
# 比较第一对不相等的字符的编码值的大小。(两个字符串同位置上的字符是一对)
print('abc' > 'ABCEDF') # True 这里就比较a和A的对应的编码值大小,如果第一对大小相同,会一次比较后面对的大小直到比较完毕。
数字字符:‘0’ <= char <= ‘9’
大写字母: ‘A’ <= char <= ‘Z’
小写字母: ‘a’ <= char <= ‘z’
中文: ‘\u4e00’ <= char <= '\u9f
例题: 判断输入的密码是否合法
pw = input('请输入密码(由字母和数字组成):')
for x in pw:
if not('0' <= x <= '9' or 'A' <= x <= 'Z' or 'a' <= x <= 'z'):
print('密码不合法')
break
else:
print('密码合法')