一. 集合 { } set
1. 定义:
- 是一种容器型数据类型;
- { } 作为容器的标志,里面多个元素用逗号隔开 {数据1,数据2,数据3,......... }
- 集合是可变的、是无序的
print({10,20,30} =={30,10,20})
#True
- 集合的元素: 元素必须是不可变类型的数据; 元素是唯一的(自动去重)
- 空集合表示:
s1 =set()
print(type(s1),len(s1)) #set
注意点:
- 集合中元素必须是不可变类型的数据
s2 = {10,2.3,True,(10,20),'abc'}
print(s2)
#{True, 2.3, 10, 'abc', (10, 20)}
- 集合中的元素是唯一的
s3 = {10,20,30,10,10}
print(s3)
#{10, 20, 30}
2. 集合的操作
a. 查 ------ 只能遍历
b. 增
- 集合.add(元素)
s1 = {10,89,21,2023,7}
s1.add(100)
print(s1)
c. 删
- 集合.remove(元素) 元素不存在会报错
s1 = {10,89,21,2023,7}
s1.remove(10)
print(s1)
- 集合.discard(元素) 删除指定元素,元素不存在不会报错
s1 = {10,89,21,2023,7}
s1.discard(10)
print(s1)
3. 数学集合运算:交集、并集、差集、对称差集、子集、真子集
a. 交集 ( & )
- 求两个集合的公共部分
s1 = {1,2,3,4,5,6,7}
s2 = {5,6,7,8,9,10}
print(s1 & s2)
# 5 6 7
b. 并集 ( | )
- 求两个集合合并成一个集合的结果(集合会自动去重的)
s1 = {1,2,3,4,5,6,7}
s2 = {5,6,7,8,9,10}
print(s1 | s2)
#{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
c. 差集 ( - )
- 集合1 - 集合2 获取集合1中 - 集合1和集合2的公共部分
s1 = {1,2,3,4,5,6,7}
s2 = {5,6,7,8,9,10}
print(s1 - s2)
#{1, 2, 3, 4}
d. 对称差集 ( ^ )
- 包含了只属于 A 或只属于 B 的元素,而不包含同时属于 A 和 B 的元素
s1 = {1,2,3,4,5,6,7}
s2 = {5,6,7,8,9,10}
print(s1 ^ s2)
#{1, 2, 3, 4, 8, 9, 10}
习题:
python = {'stu1', 'stu3', 'stu4','stu5'}
java = {'stu2', 'stu3', 'stu4'}
h5 = {'stu2', 'stu4','stu6'}
# 1)求选课学生总人数
print(python | java | h5 )
# 2)求同时选三门学科的学生有哪些
print(python & java & h5)
# 3)只选了python有哪些
print(python-(java | h5))
# 4)只选了一门学科的学生有哪些
print((python - java - h5) | (java - python - h5) | (h5 - python - java))
# 5)同时选了两门学科的学生有哪些
print((python & java) | (python & h5) | (java & h5))
e. 子集(>= <=)和真子集( > < )
区别:
- { 1,2,3 }子集: {1} {2} {3} {1,2} {1,3} {2,3} {1,2,3} {}
- { 1,2,3 }真子集: {1} {2} {3} {1,2} {1,3} {2,3} {}
- 集合1 > 集合2 - 判断集合2 是否是集合1 的真子集
- 集合1 < 集合2 - 判断集合1 是否 是集合2的真子集
print({100,200,300} > {100,200}) #True
#判断 {100,200} 是否是{100,200,300}的真子集
二. 字符串
1. 定义:
- 字符串是容器型数据类型,可以保存多个文字符号。
- 将 ' ' , " " , ''' ''' , """ """ , 作为容器的标志。 ''' ''' , """ """, 为多行字符串,里面的内容可以直接通过回车键进行换行。
- 字符串是不可变的,字符串是有序的,可以进行切片操作
- 任何文字符号都可以作为字符串的元素
- 空串 : str = '' , 引号之间什么都不能有,空格也不行。
2. 字符(普通字符、转义字符、r字符串)
a. 普通字符 :
- 在字符串中表示符号本身的字符就是普通字符(打印的内容和输入内容相同) str1 = 'abc123'
b . 转义字符:
- 在特定符号前加 \ 来表示特殊意义或者特殊功能的字符
- str1 = 'abc\n123'
str1 = 'abc\n123'
print(str1)
#abc
#123
- \n - 换行 相当于按一次enter
- \t - 水平制表符(相当于按一次tab)
- \' - 相当于一个普通的单引号
poem = 'it\'s me'
print(poem)
#it's me
- \" - 相当于一个普通的双引号
- \\ ---- 一个普通的反斜杠
path = 'c:\\name\\test\\demo.txt'
print(path)
c:\name\test\demo.txt
c. r字符串
- 在字符串的最前面加r 或者R,让字符串中所有的转义字符功能消失
path = r'c:\name\test\demo.txt'
print(path)
三. 字符编码
- 计算机在存储的时候只能存数字(存的是数字的二进制补码)
- 为了能够让计算机存储文字符号,就给每一个符号对应一个固定的数字,在每次需要存储这个符号的时候就存储这个符号对应的数字。
- 每个字符对应的固定数字就叫这个字符的编码值。
四. 字符编码表
1. ASCII 码表
- 总共有128个字符,包含英文的标点符号、数字、字母
- 数字字符在大写字母前面,大写字母在小写字母的前面(前面意味着数字小)。大写字母和小写字母之间有间隔。 A - 65. a - 97
2. Unicode编码表(python)
- 叫统一码也叫万国码,包含世界上所有国家所有民族的所有语言的符号
- Unicode 编码表是对ASCII码表的扩展,包含了ASCII码表
- 中文编码范围: 4e00 ~ 9fa5
五. 在python中对编码值的使用
1. chr
- chr(编码值) (数字转字母) ------ 获取指定编码值对应字符
print(chr(97)) # a
print(chr(65))# A
for i in range(65,65+26):
print(chr(i)) # 从A ~ Z
# 16进制前必须加 0x
for i in range(0x4e00,0x9fa5):
print(chr(i),end='') #中文生僻字
2. ord(字符) (字母转数字) ------- 获取字符的编码值
print(ord('姚'),ord('欣'))
#23002 27427
练习:把小写字母变为大写字母
x = 'm'
print(chr(ord(x)-32))
3. 编码字符 -------- \u四位的十六进制数
- 程序中表示一个字符方式有两种 1. 直接提供字符 2.使用编码字符
print('\u4e00') # 一
print('一‘)#一
案例: 判断x保存的字符是否是中文字符
x = '姚'
print('\u4e00' <=x <= '\u9f5a') #中文编码表范围
#True
六. 字符串的相关操作
1. 查 --- 和列表相同
- 计算字符串长度的时候一个转义字符长度为1.
2. 相关操作
-
+
print('hello' + 'python')
应用场景:利用字符串 的 + 和空串 ' ', 可以实现对字符串的增删改
练习1 : str1 = 'ms吗n23KS=-模式2.ksKAHss,s'
1:删除str1中所有的中文字符
for i in str1:
if '\u4e00' <= i <= '\u9fa5':
continue
empty += i
print(empty)
2:将str1中所有的中文字符替换成+
empty1 = ''
str1 = 'ms吗n23KS=-模式2.ksKAHss,s'
for char in str1:
if '\u4e00' <= char <= '\u9fa5':
### 如果是中文就拼 +
empty1 += '+'
else:
### 如果不是中文就 拼 这个字符
empty1 += char
print(empty1)
3. in 和 not in
- 字符串1 in 字符串2 --- 判断字符串2中是否有字符串1
七. 比较运算符
1.字符串比较
- 比较第一对不相等字符的编码值大小
2. 判断类别
## 是否为中文
'\u4e00' <= x <= '\u9f5a'
#是否为小写字母
'a' <= x <= 'z'
#是否为大写字母
'A' <= X <= 'Z'
#是否为字母
'a' <= x <= 'z' or 'A' <= X <= 'Z'
# 是否为数字字符
'0' <= x <= '9'