week02day03(集合、 字符串、字符编码)

发布时间:2024年01月24日

一. 集合 { }? ? 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'

文章来源:https://blog.csdn.net/weixin_46659095/article/details/135816016
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。