Day7 - 集合和字符串
01 - 集合
-
什么是集合(set)
集合是容器型数据类型,将{}作为容器的标志,{元素1,元素2,元素3,…}
可变的;无序的
元素:不可变数据;唯一的
-
空集合
x = {} # 空字典 s1 = set() # 空集合 print(type(x), type(s1)) print(s1)
-
元素是不可变
s2 = {10, 'abc', (1,2)} print(s2)
-
元素是唯一的
s4 = {10, 10, 10, 20, 30, 40} print(s4) # 集合去重
-
集合是无序
print({1,2,3} == {3,2,1})
-
-
集合的增删改查
-
查 - 集合只能遍历
补充:通过for循环遍历无序序列的时候,都是先将序列转换成列表,然后遍历列表
games = {'命运石之门', 'gta', '阴阳师', '黑暗之魂3'} for x in games: print(x)
-
增
集合.add(元素) - 在集合添加指定元素 集合.update(序列) - 将序列中所有的元素添加到集合中 games.add('英雄联盟') print(games) games.update(['求生之路', '糖豆人', '只狼']) print(games) games.update('abc') print(games)
-
删
集合.remove(元素) - 删除集合中指定的元素(元素不存在时会报错) 集合.discard(元素) - 删除集合中指定的元素(元素不存在时不会报错) games = {'c', '阴阳师', 'b', '命运石之门', '糖豆人', 'gta', 'a', '英雄联盟', '求生之路', '黑暗之魂3'} games.remove('命运石之门') games.add('部落冲突')
-
-
数学集合运算
python中的集合支持数学中的集合运算:&(交集)、|(并集)、-(差集)、^(对称差集)、>、<、>=、<=(判断包含关系)
set1 = {1,2,3,4,5,6,7,8,9} set2 = {4,5,6,7,8,9,10}
- 集合1 & 集合2 - 求两个集合的公共部分
print(set1 & set2)
- 集合1 | 集合2 - 合并两个集合产生一个新的集合
print(set1 | set2)
- 集合1 - 集合2 - 集合1中去掉包含在集合2中的元素
print(set1 - set2)
- 集合1 ^ 集合2 - 将两个集合合并后去掉公共部分
print(set1 ^ set2) # 集合1 > 集合2 - 判断集合2是否是集合1的真子集 # 集合2 < 集合1 - 判断集合1是否是集合2的真子集 # 集合1 >= 集合2 - 判断集合2是否是集合1的子集 # 集合2 <= 集合1 - 判断集合1是否是集合2的子集 # 3.用三个列表表示三门学科的选课学生姓名(一个学生可以同时选多门课) # a. 求选课学生总共有多少人 # b. 求只选了第一个学科的人的数量和对应的名字 # c. 求只选了一门学科的学生的数量和对应的名字 # d. 求只选了两门学科的学生的数量和对应的名字 # e. 求选了三门学生的学生的数量和对应的名字 python = {'stu1', 'stu2', 'stu4', 'stu6', 'stu7', 'stu10', 'stu11'} h5 = {'stu1', 'stu3', 'stu5', 'stu7', 'stu8', 'stu10'} java = {'stu1', 'stu2', 'stu5', 'stu6', 'stu7', 'stu9', 'stu12'} s1 = python | h5 | java s2 = python - h5 - java s3 = python ^ h5 ^ java s4 = python & h5 & java print('===========a==========') print(len(s1)) print('========b============') print(len(s2)) print(s2) print('==========c============') nums = len(s3)-len(s4) print(nums) print(s3 - s4) print('==========d=============') print(len(s1)-len(s3)) print(s1 - s3) print('==========e===========') print(len(s4)) print(s4)
02- 字符串
-
什么是字符串(str)
字符串是容器型数据类型,将’’,"",’’’’’’,""""""作为容器的标志里面的每一个基本符号就是字符串里面的元素
字符串是不可变的(不支持增删改);字符串是有序到的(支持下标操作)
元素:引号里面的每个基本单元就是字符串的元素,又叫字符(python只有字符的概念没有字符对应的类型,一般直接是用长度是1的字符串来表示字符)
-
空串
s1 = '' # s1 = "" s1 = '''''' s1 = """""" print(type(s1))
-
‘’、""、’’’’’’、""""""的区别
# ''、"" - 字符串中不能直接换行 s2 = 'safdfasfdfsfsff' s3 = '''无言独上西楼,月如钩,寂寞梧桐深院锁清秋 剪不断,理还乱,是离愁。 ''' print(s3)
-
字符串有序
print('abc' == 'cba')
-
-
字符
字符分为普通字符和转义字符两种:
-
转义字符
在特定的一个或者多个符号前加\让符号具有特殊功能或者特殊意义。那么这种带有\字符就是转义字符
\n - 换行 \t - 水平制表符(相当于按一下tab键) \' - 表示一个普通的单引号(有歧义是使用) \" - 表示一个普通的双引号 \\ - 表示一个普通的反斜杠
注意:任何一个转义字符长度都是1
-
普通字符
除了转义字符以外的字符都是普通字符,普通字符在字符串中表示这个符号本身,包括:汉字、数字、字母、符号、表情符号等…
# 特殊的转义字符-编码字符: \u四位的十六进制数 - 表示16进制数对应的编码值对应的字符 str1 = '\tabc\'\\\n123' print(str1) str2 = '123\\n456' print(str2) str3 = 'abc\u4fa5' str4 = 'abc\ua3f3' print(str3, str4)
字符编码
""" 1)什么是字符编码 计算机在存储数据的时候只能存数字(存的数字二进制补码),为了能够让计算机存储字符,我们给每一个 符都对应一个固定的数字,那么每个字符对应的固定的数字就是这个字符的编码值 2)字符编码表 - 记录字符和数字之间一一对应关系的表就是字符编码表 常见的字符编码表有两种:ASCII码表、Unicode编码表(python采用的是Unicode编码表) a.ASCII码表 ASCII码表总共用128个字符对应的编码,主要包括的是美国通用符号其中包括:英文标点符号、数字字符、 字母字符以及其他的一些符号 ASCII码表中,数字字符在字母的前面,大写字母在小写字母的前面,大写字母和小写字母之间有间隔 b.Unicode编码表 Unicode编码表包含ASCII码表 中文编码范围:4e00 ~ 9fa5 """
-
编码字符
print('\u0f00') print('\u4e00') print('\u1100') print('\u0f03 \u0f00 \u0f08')
-
chr(编码值) - 获取编码值对应的字符
print(chr(0x4e00)) print(chr(97)) # count = 0 # for i in range(0x4e00, 0x9fa5+1): # print(chr(i), end=' ') # count += 1 # if count % 25 == 0: # print()
-
ord(字符) - 获取字符对应的编码值(返回的是十进制数)
print(ord('s'), ord('d')) print(hex(ord('s')), hex(ord('d')))
-
03-字符串的操作
-
获取字符
字符串获取字符和列表获取元素的方法一样
-
获取字符
sentence = '你好骚啊' print(sentence[2], sentence[-1])
-
字符串切片
sentence2 = 'good good study!\nday day up!' print(sentence2[5:-2]) print(sentence2[::-1])
-
遍历
for x in sentence2: print('x', x) for index, x in enumerate(sentence2): print('index', index, 'x', x)
-
-
加法和乘法
print('abc' + '123') print('you see see you!' + 'one day day') print('abc'*3)
-
比较大小
# 两个字符串比较大小:比较第一对不相等的字符编码值的大小 """ 'a' <= char <= 'z' - 小写字母 'A' <= char <= 'Z' - 大写字母 'a' <= char <= 'z' or 'A' <= char <= 'Z' - 字母 '0' <= char <= '9' - 判断数字 '\u4e00' <= char <= '\u9fa5' - 判断中文 """ print('abc' > 'XYZ') # 练习1:输入一个字符串,统计字符串中小写字母的个数 str1 = input('输入一串字符:') num = 0 for i in str1: if 'a' <= i <= 'z': num += 1 print(num) # 练习:输入一个字符串。删除字符串中所有的中文字符 str2 = input('输入一串字符:') str3 = '' for i in str2: if '\u4e00' <= i <= '\u9fa5': continue else: str3 += i print(str3)