集合是容器型数据类型:将{}作为容器的标志,多个元素用逗号隔开:{元素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
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)改 - 无法修改元素
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))
字符串是容器型数据类型;以’‘或者"“或者”"""""或者’’’’’'作为容器的标志,里面多个字符(任意符号)。
不可变的(不支持增删改);有序的(支持下标操作)
字符串的元素:所有的字符
字符串
str1 = 'abc'
str2 = "abc123"
str3 = """12abc"""
str4 = '''123zb'''
print(type(str1),type(str2),type(str3),type(str4))
’’’’’'和""""""引起来的字符串可以直接敲回车换行
str5 = '''
asda
asda
vff3
sfdsdfsg
'''
print(str5)
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)
python中在字符串的最前面加r/R,可以让这个字符串中所有的转义字符的功能消失
str5 = '\tasd\nadasd\\aa\uffff'
print(str5)
str6 = r'\tasd\nadasd\\aa\u0000'
print(str6)
计算机在存储数据的时候,只能直接存储数字数据,而且以二进制的形式存储的数字。
位(bit)
1字节 == 8位
1kb == 1024字节
1mb == 1024kb
1Gb == 1024mb
1Tb == 1024Gb
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='')
ord(字符) - 获取字符的编码值
print(ord('装'),ord('杯'))
字符串获取字符和列表获取元素的方法一样
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)
字符串1 + 字符串2 - 将两个字符串合并产生一个新的字符串
str1 = 'abc'+'123'
print(str1)
字符串N / N字符串 - 字符串乘法N次产生一个新的字符串
str2 = 'abc'* 3
print(str2)
两个字符串比较大小的是第一对不相等的字符的编码值大小
判断一个字符是否是小写字母:‘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)
字符 in 字符串 - 判断字符串中是否有指定的字符
字符串1 in 字符串2 - 判断字符串2中是否包含字符串1
print('a'in 'abc') #True
print('how' in 'how are you') #True
print('how' in 'hadasdoasdw') #False