day9-字符串

day9-字符串

一、数字集合运算符

​ python中的集合和数学中的集合是一个东西,并且支持数学集合运算:交集、并集、差集、对称差集、子集、真子集

1、交集 - & (求两个集合的公共部分)

A = {1, 2, 3, 4, 5, 6}
B = {2, 4, 5, 7, 8, 9}
print(A & B)   # {2, 4, 5}

2、并集 - | (将两个集合合并成一个集合)

A = {1, 2, 3, 4, 5, 6}
B = {2, 4, 5, 7, 8, 9}
print(A | B)   # {1, 2, 3, 4, 5, 6, 7, 8, 9}

3、差集 - B - A (去掉之和中被包含在另外一个集合中的部分剩下的部分)

A = {1, 2, 3, 4, 5, 6}
B = {2, 4, 5, 7, 8, 9}
print(A - B)   # {1, 3, 6}
print(B - A)   # {8, 9, 7}

4、对称差集 - ^ ( 合并两个集合后看去掉公告的部分)

A = {1, 2, 3, 4, 5, 6}
B = {2, 4, 5, 7, 8, 9}
print(A ^ B)  # {1, 3, 6, 7, 8, 9}

5、子集(>=、<=)和真子集(>、<)

# {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}

# A > B   - 判断B是否是A的真子集
# A < B   - 判断A是否是B的真子集
# A >= B  - 判断B是否是A的子集
# A <= B  - 判断A是否是B的子集

# 注意:空集合不是{}({}是空字典),空集合是:set()
print({100, 200, 300} > {1, 2})      # False
print({100, 200, 300} > set())       # True
print({100, 200, 300} > {100, 300})  # True

6、练习:用三个集合表示三门学科的选课学生姓名(一个学生可以同时选多门课)

math = {'stu1', 'stu2', 'stu3', 'stu4', 'stu5'}
english = {'stu2', 'stu3', 'stu6', 'stu7', 'stu8'}
chiese = {'stu2', 'stu6', 'stu7', 'stu9', 'stu10'}

# a. 求选课学生总共有多少人
D = math | english | chiese
print(f'选课学生总共有{len(D)}人')
# b. 求只选了第一个学科的人的数量和对应的名字
F = math - english - chiese
print(f'只选了第一个学科的人的数量为{len(F)}和对应的名字{F}')
# e. 求选了三门学科的学生的数量和对应的名字
G = math & english & chiese
print(f'选了三门学科的学生的数量为{len(G)}和对应的名字{G}')
# c. 求只选了一门学科的学生的数量和对应的名字
H = F | (english - chiese - math) | (chiese - english - math)
print(f'只选了一门学科的人的数量为{len(H)}和对应的名字{H}')
# d. 求只选了两门学科的学生的数量和对应的名字
J = (math & english - chiese) | (math & chiese - english) | (english & chiese - math)
print(f'只选了两门学科的人的数量为{len(J)}和对应的名字{J}')

二、字符串和字符

1、字符串(str)

(1)容器型数据类型(一种同时保存文字符号的容器);将引号(既可以是一个引号开头和结尾,也可以是三个单引号或者双引号开头和结尾)作为容器的标志
(2)字符串是不可变;字符串是有序的
(3)字符串中的元素可以是任何文字符号

str1 = 'abc'
str2 = "abc"
str3 = '''abc'''
str4 = """abc"""

# 三个引号开头结尾的字符串可以直接换行
str6 = '''abc
123'''
print(str6)     
'''
abc
123
'''
str7 = 'abc\n123'
print(str7)
'''
abc
123
'''

# 空串
str8 = ''

2、转义字符

​ 字符串中的每个独立的字符串的元素,又叫字符;字符串的字符分为两种;普通字符、转义字符
(1)普通字符:在字符串中表示符号本身的字符就是普通字符
(2)转义字符:在特定符号前加\表示特殊意义的字符就是转义字符

​ 常用的转义字符:

​ \n - 换行
​ \t - 水平制表符(相当于按了tab键)
​ \ ’ - 普通的单引号
​ \ " - 普通的双引号
​ \ \ - 一个反斜杠

​ 注意:在计算字符串长度的时候一个转义字符的长度是1

print('abc和123...')        # abc和123...
print('\k\n123')
print('\a你好')             
print('\a你好\b')           
print('\tabc\n123')

# it's me
print('it\'s me')
print("it's me")

# I say:"good good study,day day up!"
print("I say:\"good good study,day day up!\"")
print('I say:"good good study,day day up!"')
print('\\abc')

str1 = '\tab\n234\\'    
print(len(str1))     # 8

3、r字符串

​ 在字符串的最前面加r或者R,可以让字符串中所有的转义字符的功能消失(r可以让字符串中的所有字符都变成普通字符),主要用于路径

str2 = r'\tab\n234\\'
print(str2)     # \tab\n234\\

path = r'c:\name\abc\best\code\test.py'
print(path)     # c:\name\abc\best\code\test.py

三、字符编码

1、字符编码

​ 计算机只具备保存数字的能力,为了能够让计算估计存储文字符号,给每个字符对应了一个固定的数字,每次在需要存储文字符号的时候就存储这个符号对应的数字。
​ 每个字符对应的那个固定的数字,就是这个字符的编码值。

2、编码表 - 保存每个文字字符和对应的编码值的表

​ 常用的编码值有两种:ASCII码表,Unicode编码表(Python)
(1)ASCII码表:

  • 只有128个字符(全是美国常用的符号)
  • 数字字符在大写字母前面
  • 大写字母在小写字母前面
  • 字符和数字字符都是连续递增
  • 大写字母和小写字母之间有间隙
  • (0-48;A-65;a-97)

(2)Unicode编码表

  • Unicode编码表中前128个字符就是ASCII码表中的字符
  • Unicode编码表包含世界上所有的国家所有的民族所有的语言的符号(万国码)
  • 中文编码范围:4e00~9fa5

3、编码值python中应用

(1)chr函数

  • chr(编码值) - 获取编码值对应的字符
print(chr(97))  # a
print(chr(65))  # A

# 注意:如果是16进制的编码值,在使用的时候必须加前缀’0x'、‘0X'
print(chr(0x4e00))  # 一
print(chr(0x9fa5))  # 龥
  • 打印所有的中文
for i in range(0x4e00, 0x9fa5 + 1):
    print(chr(i), end=' ')
print()

(2)ord函数

​ ord(字符) - 获取指定字符对应的编码值

# 注意:字符值得是长度为1的字符串
print(ord('a'))    # 97
print(ord('李'))   # 26446

(3)编码字符

​ 在字符串中表示字符有两种方法:直接提供字符、提供编码字符

str1 = '-\u4e00'
print(str1)         # -一

str2 = 'a=\u0061'
print(str2)         # a=a

char1 = '心'
print('\u4e00' <= char1 <= '\u9fa5')     # True

四、字符串基本操作

1、符串查操作 - 获取字符

​ 字符串获取字符和列表获取元素的语法一样

(1)查单个:字符串[下标]

str1 = 'hello world!'
print(str1[0], str1[-1], str1[4])

(2)字符串切片

str1 = 'hello world!'
print(str1[1:-1:-2])
print(str1[1:-3])
print(str1[2:])

(3)遍历

str1 = 'hello world!'
for i in str1:
    print(i)

for i in range(len(str1)):
    print(i, str1[i])

2、字符串相关操作

(1)字符串1 + 字符串2 - 将两个字符串合并成一个新的字符串

str1 = 'abcd'
str2 = 'hello'
str3 = str1 + str2
print(str3)  # abcdhello

# 字符串的加法运算可以模拟字符串的增删改
str1 = 'abc'
new_str = ''
for i in str1:
    new_str += i + '+'
print(new_str[:-1])

# 案例:删除字符串中所有的数字字符
str1 = 'ab096华师大就是看到bj363'
new_str = ''
for i in str1:
    if not '0' <= i <= '9':
        new_str += i
print(new_str)  # ab华师大就是看到bj

(2)字符串*N - 字符串重复N次产生一个新的字符串

str1 = 'abc'
print(str1 * 4)  # abcabcabcabc

(3)in 和 not in

​ 字符串1 in 字符串2 - 判断字符串1是否字符串2的子串(判断字符串2中是否包含字符串1)

print('a' in 'abc')  # True
print('ab' in 'abc')  # True
print('ac' in 'abc')  # False

(4)比较运算

'''
两个字符串比较大小比较的是第一对不相等的字符的编码值的大小
比较运算的应用: - 判断字符的性质
判断x是否是数字字符:’0‘ <= x <='9'
判断x是否是小写字母:'a' <= x <='z'
判断x是否是大写字母:'A' <= x <='Z'
判断x是否是字母:'a' <= x <= 'z' or 'A' <= x <= 'z'
判断x是否是中文:'\u4e00' <= x <= '\u9fa5'

'''
print('abc' == 'abc')  # True
print('abc' == 'bac')  # False

print('abc' > 'mn')  # False
print('zbc' > 'mn')  # True
print('Zbc' > 'mn')  # False

3、字符串相关函数

(1)len(字符串) - 统计字符串中字符的个数

(2)str(数据) - 将指定的数据转换成字符串(所有的数据都可以转换成字符串,转换的是再数据打印值再外面加引号)

(3)str(100) - 100

list1 = [1, 2, 3]
print(list1)  # [1, 2, 3]
# str(list1)     # '[1, 2, 3]'

list2 = ["abc", 100]
print(list2)  # ['abc', 100]
# str(list2)     # "['abc', 100]"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值