集合和字符串
1.什么是集合(set)
集合是容器型数据类型,将{}作为容器的标志,里面多个元素用逗号隔开:{元素1, 元素2, 元素3, …} 可变的,无序的 元素:不可变的数据,唯一的
1)空集合
x ={}
s1 = set()
print(type(x), type(s1)) # <class 'dict'> <class 'set'>
2)元素是不可变的
s2 = {10, 'abc', (1, 2)}
print(s2) # {(1, 2), 'abc', 10}
s3 = {10, ‘abc’, [1, 2]}
TypeError: unhashable type: ‘list’
列表可变,所以会报错
3)元素是唯一的
s4 = {10, 20, 30, 40, 10, 10, 20}
print(s4) # {40, 10, 20, 30}
集合会自动去重
s5 = [10, 20, 30, 40, 10, 10, 20]
print(list(set(s5))) # [40, 10, 20, 30]
4)集合是无序的
print({1, 4, 5} == {4, 1, 5}) # True
2.集合的增删改查
1)查 - 集合只能遍历
补充:用for循环遍历序列的时候,都是现将序列转换成列表,然后遍历列表
games = {'lol', 'cs', 'dnf', 'dota', 'csgo'}
for x in games:
print('x:', x)
2)增
集合.add(元素) - 在集合中添加指定的元素
games.add('kof')
print(games) # {'kof', 'cs', 'lol', 'dota', 'dnf', 'csgo'}
集合.update(序列) - 将序列中所有的元素添加到集合中
games.update({'cf', 'gta'}) # {'kof', 'gta', 'cs', 'cf', 'lol', 'dota', 'dnf', 'csgo'}
print(games)
3)删
集合.remove(元素) - 删除集合中的指定元素,若是元素不存在会报错
games = {'lol', 'cs', 'dnf', 'dota', 'csgo'}
games.remove('dnf')
print(games) # {'cs', 'lol', 'dota', 'csgo'}
集合.discard(元素) - 删除集合中的元素,若是元素不存在也不会报错
4)改 - 先删除原来的,在添加新的
games = {'lol', 'cs', 'dnf', 'dota', 'csgo'}
games.remove('dnf')
games.add('ff')
3.数学集合运算
python中的集合支持数学中的集合运算:&(交集), |(并集), -(差集),^(对称差集), < > <= >=(判断包含关系)
1)集合1 & 集合2 - 求两个集合的公共部分
set1 = {1, 2, 3, 4, 5}
set2 = {1, 2, 3, 4, 5, 6, 7, 8}
print(set1 & set2) # {1, 2, 3, 4, 5}
2)集合1 | 集合2 - 合并产生一个新的集合
print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7, 8}
3)集合1 - 集合2 - 集合1中去掉包含在集合2中剩下的元素
set1 = {1, 2, 3, 4, 5}
set2 = {1, 2, 3, 4, 5, 6, 7, 8}
print(set1 - set2) # set()
print(set2 - set1) # {8, 6, 7}
4)集合1 ^ 集合2 - 将两个集合合并后去掉公共部分,只留下不重复的
set1 = {1, 2, 3, 4, 5}
set2 = {1, 2, 3, 4, 5, 6, 7, 8}
print(set1 ^ set2) # {6, 7, 8}
5)集合1 > 集合2 - 判断集合2是否为集合1的真子集
集合1 < 集合2 - 判断集合1是否为集合2的真子集
集合1 >= 集合2 - 判断集合2是否是集合1的子集
集合1 <= 集合2 - 判断集合1是否是集合的子集
print({1, 2, 3, 4} > {1, 2}) print({1, 2, 3, 4} > {1, 2, 3, 4})
字符串
1.什么是字符串
字符串是容器值数据类型,将单引号或者是双引号,或者是三个单引号,三个双引号作为容器标志里面的每一个基本符号就是字符串元素 ’ ‘, " ", ‘’’ ‘’’, “”" “”" 字符串是不可变的(不支持增删改):字符串是有序的(支持下标操作) 元素:引号里面的每个基本单元就是字符串的元素,又叫字符(python中只有字符的概念没有字符对应的类型) 一般使用长度是1的字符串来表示字符
1)空串
s1 = ‘’ s2 = “” s3 = ‘’’’’’ s4 = “”""""
2)’’,"“与’’’’’’,”"""""的区别
''和"" - 字符串中不能直接换行
‘’’’’’ 和"""""" - 可以直接换行
3)字符串有序
print(‘abc’ == ‘cba’) # False
2.字符
1)字符的分类 字符分为普通字符和转义字符两种 转义字符:在特定的一个或者多个符号前,加上 \ 让符号具有特殊功能或者特殊意义,那么这种带有\字符就是转义字符 \n - 换行 \t - 水平制表符(相当于按一下tab键) ’ - 表示一个普通的单引号 " - 表示一个普通的双引号 \ - 表示一个普通的 注意:任何一个转义字符对应的长度为1 2)除了转义字符以外的字符都是普通字符,普通字符在字符串中表示这个字符本身,包括汉字数字和字母,表情符号等 “”"
特殊的转义字符 - 编码字符:\u四位的十六进制数 - 表示十六进制数对应的编码值对应的字符
str1 = 'abc\n123'
print(str1)
str4 = 'abc\u4fa5'
print(str4)
2.字符编码
1)什么是字符编码 计算机在存储数据的时候,只能存储数字二进制补码,为了能够让计算机存储字符,给每一个字符都对应一个固定的数字 这个字符所对应的数字就是这个字符的编码值 2)字符编码表 - 记录字符和数字之间一一对应关系的表就是字符编码表 常见的字符编码表有两种:ASCII码表和Unicode编码表 ASCII码表: 总共有128个字符,主要包含了美国的符号,包括英文的标点符号,数字字符,字母字符以及其他的一些特殊符号 数字字符在字母的前边,大写字母在小写字母的前边,大写字母和小写字母之前有间隔 ,大写字母和小写字母中间间隔32 Unicode编码表:python用, 包含ASCII码表,中文编码范围:4100 - 9fa5
1)编码字符
print(’\u11ef’)
2)chr(编码值) - 获取编码值对应的字符
print(chr(0x4e00)) print(chr(97)) # a
for x in range(0x4e00, 0x9fa5+1):
3)ord(字符) - 获取字符对应的编码值(返回的是十进制数)
print(ord('殷')) # 27575
print(ord('睿')) # 30591
print(hex(27575)) # 0x6bb7
print(hex(30591)) # 0x777f
1.获取字符
字符串获取字符和列表获取元素的方法一样
1)获取字符
sentence = '当你想要放弃的时候,比赛就已经结束了'
print(sentence[2], sentence[-8]) # 想 比
2) 字符串切片
sentence2 = 'great power makes great responsibility'
print(sentence2[:])
3)遍历
for x in sentence2:
print('x:', x)
2.加法和乘法
print('abc' + '123')
print('all' + 'of you')
print('all' * 3)
3.比较大小
比较第一对不相等的字符编码值的大小
char
'a' <= char <= 'z' - 小写字母
'A' <= char <= 'Z' - 大写字母
'a' <= char <= 'z' or 'A' <= char <= 'Z‘ - 字母
'\u4e00' <= char <= '\u9fa5' - 中文字符
print('abc' > 'XCVB') # True
print('abc' > '事实') # False
练习:输入一个字符串,统计字符串中小写字母的个数
char = 'dhaiudhJHIUG980JI8H9kkk'
list1 = []
for x in char:
if 'a' <= x <= 'z':
list1.append(x)
print(len(list1))
练习:输入一个字符串,删除字符串中中文字符
char1 = '米烤肉稀罕lov可分解和e'
str3 = ''
for y in char1:
if '\u4e00' <= y <= '\u9fa5':
continue
str3 += y
print(str3)
str2 = 'nis耗时ss==AHJ看'
str3 = ''
for x in str2:
if '\u4e00' <= x <= '\u9fa5':
continue
str3 += x
print(str3) # nisss==AHJ