Day8 - 集合和字符串

本文详细介绍了Python中的集合和字符串操作。包括集合的创建、元素的增删改查,数学集合运算符的使用,以及字符串的定义、字符编码、相关操作等。重点讲解了集合的去重功能、字符串的字符编码与转义字符,并通过实例演示了集合与字符串的各种操作方法。
摘要由CSDN通过智能技术生成

一、集合(set)

1. 什么是集合(set)
"""
集合是容器型数据类型,将{}作为容器的标志:{元素1, 元素2, 元素3,...}
可变的;无序的
元素 -- 必须是不可变类型的数据;唯一的(自带去重功能)
"""
1)空集合
set_empty = set()
print(len(set_empty), type(set_empty))  # 0 <class 'set'>
2)集合无序
print({1, 2, 3} == {3, 2, 1})       # True 无序
3)集合的元素是不可变的数据
s1 = {10, 2.3, 'abc', (10, 20)}
# s1 = {10, 2.3, 'abc', [10, 20]}       # 报错!列表不可以作为集合的元素
print(s1)
4)集合元素是唯一的 – 集合自带去重功能
s1 = {10, 20, 30, 10, 10}
print(s1)       # {10, 20, 30}
names = ['张三', '李四', '王五', '赵四', '张三', '王五']
print(names)
print(set(names))       # {'赵四', '张三', '王五', '李四'} 去重,元素必须不可变
2. 集合元素的增删改查
1)查 – 遍历
"""
for 变量 in 集合:
    循环体
"""
s1 = {'神武', '穿越火线', 'QQ飞车', '英雄联盟'}
for x in s1:
    print('x:', x)
2)增
# 集合.add(元素) -- 将指定元素添加到集合中
# 集合.update(序列) -- 将序列中的元素全部添加到集合中
s1.add('红警')
print(s1)   # {'英雄联盟', '神武', '红警', '穿越火线', 'QQ飞车'}

s1.update(['炉石传说', '开心消消乐'])
print(s1)   # {'开心消消乐', '红警', '炉石传说', '神武', 'QQ飞车', '英雄联盟', '穿越火线'}
3)删
# 集合.remove(元素) -- 删除指定元素;元素不存在会报错
# 集合.discard(元素) -- 删除指定元素;元素不存在不报错
s1 = {'神武', '穿越火线', 'QQ飞车', '英雄联盟', '流星蝴蝶剑'}
s1.remove('QQ飞车')
print(s1)       # {'英雄联盟', '神武', '流星蝴蝶剑', '穿越火线'}

s1.discard('流星蝴蝶剑')
print(s1)       # {'英雄联盟', '神武', '穿越火线'}

# s1.remove('部落冲突')   # 报错
s1.discard('部落冲突')   # 不会报错

二、数学集合运算符

Python中的集合支持数学集合运算:交集(&)、并集(|)、差集(-)、对称差集(^)、子集(>=、<=)、真子集(<、>)

1. 交集(&) – 获取两个集合的公共部分
# 集合1 & 集合2
s1 = {1, 2, 3, 4, 5, 6, 7}
s2 = {5, 6, 7, 8, 9}
print(s1 & s2)      # {5, 6, 7}
2. 并集(|)
# 集合1 | 集合2 -- 将两个集合合并成一个集合
print(s1 | s2)      # {1, 2, 3, 4, 5, 6, 7, 8, 9}
3. 差集(-)
# 集合1 - 集合2 -- 去掉集合1中被包含在集合2的部分剩下的部分
print(s1 - s2)      # {1, 2, 3, 4}
print(s2 - s1)      # {8, 9}
4. 对称差集(^)
# 集合1 ^ 集合2 -- 合并两个集合去掉公共部分
print(s1 ^ s2)      # {1, 2, 3, 4, 8, 9}
5. 子集和真子集
# 集合1 > 集合2 -- 判断集合2是否是集合1的真子集
# 集合1 < 集合2 -- 判断集合1是否是集合2的真子集
# 集合1 >= 集合2 -- 判断集合2是否是集合1的子集
# 集合1 <= 集合2 -- 判断集合1是否是集合2的子集
print({100, 200, 300} > {1, 2})        # False
print({100, 200, 300} > {200, 100})      # True
print({100, 200, 300} > {200, 100, 300})        # False
print({100, 200, 300} >= {200, 100, 300})       # True

三、字符串和字符

1. 什么是字符串(str)
"""
字符串是容器型数据类型,将''、""、""""""、''''''作为容器标志,里面的每一个符号就是它的元素
不可变的;有序的
元素(字符) -- 就是引号中的每个符号,这里的符号分为两种;普通字符和转义字符
"""
# """开头或'''开头的字符串,可以直接在字符串内部通过回车直接换行,"开头和'开头的字符串换行必须使用转义字符\n
# str1 = ''
# str2 = ""
# str3 = """"""
# str4 = ''''''
2. 字符
# 字符就是字符串中的元素(引号中每个独立的符号)
"""
1)普通字符 -- 符号在字符串中表示符号本身
2)转义字符 -- 在特点符号前加\用来表示特殊功能或者特殊意义的符号
\n -- 换行
\t -- 水平制表符(tab键)
\' -- 一个单引号
\" -- 一个双引号
\\ -- 一个普通的反斜杠
"""

str1 = 'it\'s me!'
print(str1)

str1 = "it's me!"
print(str1)

str1 = "i say:\"good good study, day day up!\""
print(str1)

str1 = 'i say:"good good study, day day up!"'
print(str1)

str1 = 'c:\\test\\name\\pop.txt'
print(str1)

str1 = 'abc\\n123'
print(str1)

四、字符编码

1. 编码字符 – 转义字符中的一种
# \u4位的16进制数 -- 表示的是16进制数作为编码值对应的字符
# 16进制数(每一位上的数是0 ~ 9或者a/A ~ f/F):af、9f4、23ac78
str1 = 'abc\u4e00123'
print(str1)

# str2 = 'abc\u1'   # 报错!\u后面的四个字符必须是4位的16进制数
2. 字符编码
# 计算机存储数据的时候只具备存储数字的能力;计算机要存储文字符号(字符)的时候,其实存的是这个符号对应的编码值
# 每个符号都对应一个固定的数字,当计算机要存储这个符号的时候就存这个符号对应的数字(每个符号对应的数字就是这个符号的编码值)
# 'a' + 10 -> 107
3. 字符编码表 – 存储了每个符号对应的编码值
"""
1)ASCII码表:总共有128个字符
数字字符在大写字母的前面,大写字母在小写字母的前面,大写字母和小写字母之间有间隙

2)Unicode编码表(Python使用的)
包含了世界上所有国家所有民族的所有语言的符号
Unicode中包含了ASCII码表
中文编码范围:4e00 ~ 9fa5
"""
1)chr(编码值) – 获取编码值对应的字符
result = chr(97)
print(result)       # a
# python中16进制数的表示方式:0x十六进制
result = chr(0x4e00)
print(result)       # 一
print(0x9fa5 - 0x4e00)  # 20901
# 打印所有的几何图形
for x in range(0x25A0, 0x25FF):
    print(chr(x), end='')
2)ord(字符) – 获取字符对应的编码值
print(ord('a'))         # 97
3)编写字符:\u4位的16进制编码值
str1 = '一\u4e00\u0061'
print(str1)         # 一一a

五、字符串相关操作

1. 查
# 字符串获取元素和列表获取元素的语法一样
str1 = 'you see see, one day day!'
print(str1[0], str1[-1])        # 'y' '!'

# 注意:一个转义字符符长度是1
str2 = '\tabc\n123\u4e00'
print(len(str2))        # 9
print(str2[1])          # 'a'

print(str2[2:6])        # 'bc\n1'
print(str1[::-1])       # '!yad yad eno ,ees ees uoy'

for index in range(len(str1)):
    print(index, str1[index])
2. +、*
print('abc' + '123')    # 'abc123'
print('abc' + ' ' + '123')   # 'abc 123'
print('abc' * 3)        # 'abcabcabc'
3. 比较运算
print('abc' == 'acb')       # False

# 字符串比较大小:比较第一对不相等的字符串的编码值大小
"""
判断字符的性质:
是否是数字字符:'0' <= x <= '9'
是否是大写字母:'A' <= x <= 'Z'
是否是小写字母:'a' <= x <= 'z'
是否是字母:'A' <= x <= 'Z' or 'a' <= x <= 'z'
是否是中文:'\u4e00' <= x <= '\u9fa5'
"""
print('MN123' > 'a123')         # False
print('aN123' > 'a123')         # True

# 练习:统计字符串中数字字符的个数
str1 = '是否放几块21sa2xd222ff21x2vx'
count = 0
for x in str1:
    if '0' <= x <= '9':
        count += 1
print(count)
4. in和not in
# 字符串1 in 字符串2 -- 判断字符串2中是否存在字符串1(字符串2中是否包含字符串1)
print(10 in [10, 20, 30])       # True
print([10, 20] in [10, 20, 30])     # False
print([10, 20] in [[10, 20], 20, 30])   # True

print('a' in 'apple')           # True
print('ap' in 'apple')          # True
print('al' in 'apple')          # False
5. 相关函数
# len(字符串)
# str(数据) -- 将数据转换成字符串(a.任何类型的数据都可以转换成字符串 b.转换的时候是直接在数据的打印值外面加引号)
str(100)        # '100'
str(True)       # 'True'

list1 = [10,20,30]
print(list1)
result = str(list1)       # '[10, 20, 30]'
print(len(result))        # 12

dict1 = {"name":'小明',"age":18,'score':100}
print(dict1)        # {'name': '小明', 'age': 18, 'score': 100}
str(dict1)    # "{'name': '小明', 'age': 18, 'score': 100}"

x = lambda item: item*2
print(x)
str(x)    # '<function <lambda> at 0x105038670>'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值