集合与字符串——python

一、 集合

1. 什么是集集合

集合是容器型数据类型:将{}作为容器的标志,多个元素用逗号隔开:{元素1,元素2,元素3,…}
集合是可变的;无序的;
元素:不可变的,唯一的

空集合

x = {}  #{}是空字典
print(type(x))
y = set()   #空集合
print(type(y))

元素不可变的

set1 = {12,'asda',(10,20)}
# set2 = {12,'asda',[10,20]}       #unhashable type: 'list?‘

元素是唯一的

set3 = {1,2,3,4,5,1,2,3,4,5}
print(set3)

集合去重

names = [1,2,3,1,2,3,4]
names = set(names)
print(names)

集合是无序

print({1,2} == {2,1})   #True
2. 集合的增删改查

1)查 - 遍历

set4 = {1,2,3,4,5,6}
for x in set4:
    print(x)

2)增

set4 = {1,2,5,6,3}

a. 集合.add(元素) - 在集合中添加元素

set4.add(20)
print(set4)

b. 集合.update(序列) - 将序列中所有的元素添加到集合中

set4.update('abc')
print(set4)

3)删
a. 集合.remove(元素) - 删除指定元素(如果元素不存在会报错)

set4 = {1,2,56,6,4}
set4.remove(56)
print(set4)
# set4.remove(3)

b. 集合.discard(元素) - 删除指定元素(如果元素不存在不会报错)

set4 = {1,2,56,6,4}
set4.discard(56)
print(set4)
set4.discard(3)
print(set4)

4)改 - 无法修改元素

3. 数学集合运算

python中的集合支持数学运算:子集(>,<,>=,<=),并集(|),交集(&)

1)子集
a. 集合1>集合2 - 判断集合2是否是集合1的真子集

print({1,2,3}>{1,2})    #True
print({1,2}>{1,2})      #False

b. 集合1>=集合2 - 判断集合2是否是集合1的子集

print({1,2,3}>={1,2})   #True
print({1,2}>={1,2})     #True

2) 并集

set1 = {1,2,3}
set2 = {3,4,5}
print(set1 | set2)

3) 交集

set1 = {1,2,3}
set2 = {3,4,5}
print(set1 & set2)

4) 差集

print(set1 - set2)      #{1, 2}
print(set2 - set1)      #{4, 5}

5)对称差集

print(set1^set2)        #{1, 2, 4, 5}

练习:
a. 求选课学生总共有多少人
b. 求只选了第一个学科的人的数量和对应的名字
​ c. 求只选了一门学科的学生的数量和对应的名字
d. 求只选了两门学科的学生的数量和对应的名字
​ e. 求选了三门学生的学生的数量和对应的名字

python = {'stu1', 'stu2', 'stu5', 'stu8', 'stu10'}
java = {'stu3', 'stu5', 'stu6', 'stu7', 'stu8', 'stu10'}
h5 = {'stu2', 'stu4', 'stu5', 'stu7', 'stu9', 'stu10'}
print('总共:',len(python|java|h5))
print('只选了python',python-(java|h5),'人数为',len(python-(java|h5)))
print('只选了一门学科的人',(python-(java|h5))|(java-(python|h5)) | (h5-(java|python)),'人数为',len((python-(java|h5))|(java-(python|h5)) | (h5-(java|python))))
print('选了两门学科的人',((python&java) - (python&java&h5) )| ((h5&java) - (python&java&h5)) |((python&h5) - (python&java&h5)),'人数为',len(((python&java) - (python&java&h5) )| ((h5&java) - (python&java&h5)) |((python&h5) - (python&java&h5))))
print('都选了的人',python&java&h5,'人数为',len(python&java&h5))

二、 字符串与字符

1. 什么是字符串

字符串是容器型数据类型;以’‘或者"“或者”"""""或者’’’’’'作为容器的标志,里面多个字符(任意符号)。
不可变的(不支持增删改);有序的(支持下标操作)
字符串的元素:所有的字符

字符串

str1 = 'abc'
str2 = "abc123"
str3 = """12abc"""
str4 = '''123zb'''
print(type(str1),type(str2),type(str3),type(str4))

’’’’’'和""""""引起来的字符串可以直接敲回车换行

str5 = '''
asda
asda
vff3
sfdsdfsg
'''
print(str5)
2. 字符

python没有字符对应的类型只有字符的概念

1)普通字符:包含所有的符号,例如:数字、字母、中文、各种图形符号等。
2)转义字符:和\结合后具体有特殊意义的字符,就是转义字符(转义字符不是python特有的)
\n - 换行
\t - 一个水平制表符(相当于按了一次tab键)
’ - 一个单引号字符
" - 一个双引号字符
\ - 一个反斜杠字符
注意:任何一个转义字符的长度是1

普通字符

str1 = '123'
str2 = 'adsa'
str3 = '!@@@#!'
str4 = '撒旦'

转义字符

str1 = '123\nabc\n哈哈'
print(str1)

str2 = '123\'abc'
print(str2)

str3 = "123\"abc"
print(str3)

str4 = '\t123123'
print(str4)

3. 阻止转义

python中在字符串的最前面加r/R,可以让这个字符串中所有的转义字符的功能消失

str5 = '\tasd\nadasd\\aa\uffff'
print(str5)
str6 = r'\tasd\nadasd\\aa\u0000'
print(str6)

三、 字符编码

1.计算机数据存储

计算机在存储数据的时候,只能直接存储数字数据,而且以二进制的形式存储的数字。
位(bit)
1字节 == 8位
1kb == 1024字节
1mb == 1024kb
1Gb == 1024mb
1Tb == 1024Gb

2.字符编码

1)字符编码
为了能够让计算机存储字符,我们给每个字符关联一个具体的数字,在需要存储字符的时候就存储字符对应的数字
每个字符对应的数字就是字符的编码值

2)编码表
保存字符和数字一一对应关系的表就是字符编码表,常用的字符编码表有两种:ASCII码表、Unicod编码表
a. ASCII码表:采用1个字节对128个字符进行编码,其中包括英文符号、数字和字母。其中数字的编码在字母的前面,大写字母在小写字母的前面,大小写字母没有连续
b. Unicode编码表:叫万国表,包含了世界上所有国家的所有语言的符号。前128个字符就是ASCII码表中的字符,其中中文的编码范围是:4e00~9fa5

1.编码字符:\u四位的16进制数(这儿的四位的16进制数就是字母的编码值)

str1 = 'a\u0061'
print(str1)
str2 = '\u4e00'
print(str2)

2.chr函数
chr(编码值) - 获取编码值对应的字符

print(chr(97))

练习:打印所有汉字

for i in range(0x4e00,0x9fa5):
    print(chr(i),end='')

3.ord函数

ord(字符) - 获取字符的编码值

print(ord('装'),ord('杯'))

四、字符串的相关操作

1. 获取字符串

字符串获取字符和列表获取元素的方法一样
1)获取

str1 = '人生苦短,我用python!'
print(str1[5])

str2 = 'how are\n you!'
print(str2[-4],str2[9])

2)切片

message = '曾经有一份真挚的爱情摆在我面前,我珍惜了!'
print(message[1:])
print(message[2:10:3])
print(message[-2:-10:-1])

3)遍历

message1 = 'you jump, i jump!'
for x in message1:
    print(x)

for x, y in enumerate(message1):
    print(x, y)

练习:打印message3中每个字符的编码值

message3 = 'you jump, i jump!'
for i in message3:
    print(i,ord(i))

练习:打印汉字的个数

message4 = 'how are you? 我很好!你呢?'
count = 0
for i in message4:
    if 0x4e00 <= ord(i) <= 0x9fa5:
        count += 1
print(count)
2. 加法和乘法运算

字符串1 + 字符串2 - 将两个字符串合并产生一个新的字符串

str1 = 'abc'+'123'
print(str1)

字符串N / N字符串 - 字符串乘法N次产生一个新的字符串

str2 = 'abc'* 3
print(str2)
3. 比较运算:>,<,>=,<=

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

print('abc' > 'Z123')
print('你sad' > 'sdada132')

练习:取出字符串中所有的小写字母

str3 = 'adad,sad上单,daADFSF,.ad'
str4 = ''
for s in str3:
    if 'a' <= s <= 'z':
        str4 += s
print(str4)

练习:将字符串中所有的小写字母转换成大小字母

str3 = 'adad,sad上单,daADFSF,.ad'
new_str = ''
for s in str3:
    if 'a' <= s <= 'z':
        s = chr(ord(s) - 32)
    new_str += s
print(new_str)

4. in 和 not in

字符 in 字符串 - 判断字符串中是否有指定的字符
字符串1 in 字符串2 - 判断字符串2中是否包含字符串1

print('a'in 'abc')              #True
print('how' in 'how are you')   #True
print('how' in 'hadasdoasdw')   #False

你可能感兴趣的:(集合与字符串——python)