一、集合
1.什么是集合
集合是容器型数据类型:将()作为容器的标志,多个元素用逗号隔开:{元素1,元素2,元素3,…}
集合是可变的;无序的
元素:不可变,唯一的
空集合
x = {} # 空字典
print(type(x))
y = set() # 空集合
print(type(y), len(y))
元素不可变的
元素是唯一的(契合自带去重功能)
set3 = {1, 2, 3, 1 ,2 ,2, 4}
print(set3) # {1, 2, 3, 4}
集合去重
names = ['张三', '李四', '王五', '张三']
names = set(names)
print(names)
集合是无序的
print({1, 2} == {2, 1}) # True
2.集合的增删改查
1)查 - 遍历
set4 = {10, 20, 78, 90}
for x in set4:
print(x)
2)增
集合.add(元素)
在集合中添加元素
set4 = {10, 20, 78, 90}
set4.add(100)
print(set4)
集合.update(序列)
将序列中所有元素添加到集合中
3)删
集合.remove(元素)
删除指定元素(如果元素不存在会报错)
set4 = {10, 20, 78, 90}
set4.remove(78)
print(set4)
集合.discard(元素)
删除指定元素(如果元素不存在不会报错)
set4 = {10, 20, 78, 90}
set4.discard(78)
print(set4)
4)改
无法修改元素,只能删了重新添加元素
3.数学集合运算
python中的集合支持数学的集合运算
1)子集(>、<、>=、<=)
集合1>集合2 - 集合2是集合1的真子集
print({200, 300, 400} > {1, 2})
print({10, 20, 30} > {10, 20})
集合1 >= 集合2 - 集合2是集合1的子集
print({200, 300, 400} >= {1, 2})
print({10, 20, 30} >= {10, 20})
2)并集(|)
set1 = {1, 2, 3, 4, 5, 6}
set2 = {4, 5, 6, 7, 8}
print(set1 | set2)
3)交集(&)
print(set1 & set2)
4) 差集(-)
print(set1-set2)
print(set2-set1)
5)对称差集(^)
print(set1^set2)
二、字符串
1.什么是字符串
字符串是容器型数据类型:以单引号或者双引号或者""""""或者’’’’’'作为容器的标志,里面多个字符(任意符号)
不可变(不支持增删改),有序的(支持下标操作)
字符串的元素:字符串的每个基本单元,字符(任何符号都可以)
2.字符
python中没有字符对应的类型,只有字符的概念
1)普通字符
包含所有的符号,例如:数字、字母、中文、各种图形符号等
2)转义字符
和\结合后具有特殊功能和特殊意义的字符,就是转义字符(转义字符不是python的概念)
\n - 换行
’ - 一个单引号
" - 一个双引号
\ - 一个反斜杠
注意: 任何一个转义字符长度都是1
str1 = '123\nabc\n你好'
print(str1)
3)\u4位的十六进制数 - 编码字符
3.阻止转移
python中在字符串最前面加r或者R,可以让字符串中所有的转义字符功能消失
str7 = '\t123\nabc\\aaa\u4e00'
print(str7)
str8 = r'\t123\nabc\\aaa\u4e00'
print(str8)
三、字符编码
1.计算机数据存储
计算机在存储数据的时候,只能直接村塾数字数据,而且以二进制形式存储的数字
位(bit)
1字节(byte) = 8位
1KB = 1024字节
1MB = 1024KB
1GB = 1024MB
1T = 1024GB
2.字符编码
1)字符编码
为了能够让计算机存储字符,我们给每个字符关联一个具体数字,在需要存储字符的时候就存储这个字符对应的数字
每个字符对应的数字就是字符的编码值
2)编码表
保存字符和数字一一对应关系的表就是编码表
字符编码表有两种:ASCII码表 、Unicode码表
ASCII码表
用一个字节对128个字符进行编码,其中包括常用的英文符号、数字和字母。其数字编码在字母前面,大写字母的编码在小写字母前,大写字母和小写字母不连续
Unicode码表
万国码,包含了世界上所有国家所有名族的所有语言的符号。前128个字符就是ASCII码表中的字符。中文的编码范围是4e00~9fa5
4)编码字符
\u四位的十六进制数(这儿的4位的十六进制数就是字母的编码值)
str1 = 'a\u0061' # 0061是97的16进制数
print(str1) # aa
print('\u4e02')
5)chr函数
chr(编码值) - 获取编码对应的字符
练习: 打印所有的汉字
for code in range(0x4e00,0x9fa6):
print(chr(code),end=' ')
6)ord函数
ord(字符) - 获取字符的编码值
print(hex(ord('嘻')),hex(ord('哈')),hex(ord('呵')))
四、获取字符
1.获取字符串
字符串获取字符和列表获取元素的方法一样
1)获取单个字符
str1 = '人生苦短,'
print(str1[2])
str2 = 'how are\n you'
print(str2[9])
2)切片
message = '只是还没告诉你,对不起我爱你~'
print(message[11:14])
3)遍历
message2 = '你以为我以为就是你以为的'
for x in message2:
print(x)
练习:统计中文字符的个数
message3 = 'how are you? 我很好!你呢?'
count = 0
for x in message3:
if 0x4e00 <= ord(x) <= 0x9fa5:
count += 1
print(count)
2.加法和乘法运算
字符串1+字符串2 - 将了两个字符串合并产生一个新的字符串
str1 = 'abc'+'123'
print(str1)
字符串1N / N字符串 - 字符串重复N次产生一个新的字符串
3.比较运算:>、<、>=、<=
两个字符串比较大小 比较的是第一对不相等的字符的编码值大小
判断一个字符是否是小写字母:‘a’ <= x <= ‘z’
判断一个字符是否是小写字母:‘A’ <= x <= ‘Z’
判断一个字符是否是字母:‘a’ <= x <= ‘z’ or ‘A’ <= x <= ‘Z’
判断一个字符是否是数字字符: ‘0’ <= x <= ‘9’
判断一个字符是否是中文字符:’\u4e00’ <= x <= ‘\u9fa5’
练习:取出字符串中所有小写字母
str3 = 'aksjdOAIDJoiaasdl,之哟sakdjQOPWJDso'
str4 = ''
for x in str3:
if 'a' <= x <= 'z':
str4 += x
print(str4)
练习:将字符串中所有小写字母转换成大写字母
str4 = ''
for x in str3:
if 'a' <= x <= 'z':
x = chr(ord(x) - 32)
str4 += x
print(str4)
4.in 和 not in
字符 in 字符串 - 判断字符串中是否有指定的字符
字符串1 in 字符串2 - 判断字符串2中是否包含字符串1
print('a' in 'abc')
print('how' in 'how are you')
print('how' in 'habco123w')