入门 N day
集合
集合是容器型数据类型,将{}作为容器的标志里面对每个元素用逗号隔开
{元素1,元素2,元素3…} 集合是可变的,无序的,里面的元素是不可变的数据,唯一的
<class ‘set’> 集合类型
# 空集合
x = {
} # 这是空的字典,不是集合
x1 = set{
} #空集合
元素不可变
s2 = {
1,2,3,'13212'}
print(s2) # {1,2,3,'13212'}
'''
s3={1,3,5,[1,2]}
print(s3)
# TypeError: unhashable type: 'list'
集合里面元素不能是列表,因为列表是可变的
'''
# 利用类型转换去重 set() 转换成集合类型
s3=[1,2,2,3,5,10,14,10,50,50]
s4=list(set(s3))
print(s4)
集合的增删改查
查:集合只能遍历,遍历没有顺序
s2={
1,2,3,'231345'}
for i in s2:
print(i) # 通过for循环遍历都是先转换成列表,遍历列表
增:
集合.add(元素) 在集合中添加指定元素
集合.update(序列) 将序列中所有的元素添加到集合中,元素不可变才行,不然会报错
s2 = {
1, 2, 3, '231345'}
s2.add('我是添加元素')
print(s2) # {1, 2, 3, '我是添加元素', '231345'} 顺序不定,习惯就好
s2.update((4, 5, 6))
print(s2) # {1, 2, 3, '我是添加元素', 4, 5, 6, '231345'}
如果添加的序列是字典,添加的元素为字典中的key
s2.update({
'我是key1': "vlaue", '我是key2': '1'})
print(s2)
# {1, 2, 3, 4, 5, 6, '我是key1', '231345', '我是添加元素', '我是key2'}
# 删
s2 = {
1, 2, 3, '231345'}
s2.remove(1)
print(s2) # {'231345', 2, 3}
# 改 先删除原来的元素再添加新的元素
s2 = {
1, 2, 3, '231345'}
s2.remove(1)
s2.add(5)
print(s2) # {2, 3, 5, '231345'}
python中的集合,支持数学中的集合运算&(交集) |(并集)、-(差集)、^(对称差集
< > >= <= (判断包含关系)
j1 = {
1, 2, 3, 4}
j2 = {
2, 3, 4, 5}
j3 = {
1, 2}
j4 = {
1, 2, 3, 4, 5}
print(j1 & j2) # {2, 3, 4} 集合1 & 集合2 求两个集合的公共部分
print(j1 | j2) # {1, 2, 3, 4, 5} 将两个集合合并
print(j1 - j2) # {1} 去掉j1中包含在j2里面的元素
print(j2 - j1) # {5} 去掉j2中包含在j1里面的元素
print(j1 ^ j2) # {1, 5} 去掉两个集合公共的部分
print(j1 > j3) # True 判断j3是否是j1的真子集
练习
用三个列表表示三门学科的选课学生姓名(一个学生可以同时选多门课)
python_student1= ['学生1', '学生2', '学生4', '学生6', '学生7', '学生10', '学生11']
h5_student2 =[ '学生1', '学生3', '学生5', '学生7', '学生8', '学生10']
java_student3 = ['学生1', '学生2', '学生5', '学生6', '学生7', '学生9', '学生12']
python_student=set(python_student1)
h5_student = set(h5_student2)
java_student =set(java_student3)
# a 求选课学生总共有多少人 12
sz=python_student | h5_student | java_student
print('有', len(sz), '个人')
# b 求只选了第一个学科的人的数量和对应的名字 {'学生11', '学生4'}
sp=python_student - h5_student - java_student
print('只选了第一个学科的学生有:', sp)
# c 求只选了一门学科的学生的数量和对应的名字 只选了一门学科的学生有 2 个 {'学生7', '学生1'}
m = python_student ^ h5_student ^ java_student
n= python_student& h5_student & java_student
s1=m-n
print('只选了一门学科的学生有', len(s1), '个', s1)
# e. 求选了三门学生的学生的数量和对应的名字
s3 = python_student & h5_student&java_student
print('选了三门的学生有:',s3)
# d. 求只选了两门学科的学生的数量和对应的名字
# 思路:用总的学生减去只选一门学科的学生和选了三门学科的学科的学生
sm=sz-s1-s3
print('只选了两门的学生有:',sm)
字符串
字符串是容器类型数据类型,将“”、’‘、’‘’ ‘’‘、“”“ ”“”、作为容器的标志
里面的每一个基本符号就是字符串的元素
字符串是不可变的(不支持增删改),字符串是有序的(支持下标操作)
元素:
引号里面的每一个基本单元就是字符串的元素,
又叫字符(python中只有字符概念,没有字符对应的类型)
一般直接使用长度是1的字符串来表示字符
# 空的字符串(空串)
s1 = ''
s2 = ""
s3 = ''''''
s4 = """"""
print(type(s1), type(s2), type(s3), type(s4), s1, s2, s3, s4) # 字符串类型
# ''、""和""""""、''''''的区别
'''
''和""字符串中不能换行
’‘’‘’‘和“”“”“”就可以换行
'''
s5 = '我不能换行,不然要报错'
s6 = '''
我 不
可 报
以 错
'''
print(s5, s6)
# 字符串是有序的 False
print('abc' == 'cba')
字符
字符分为普通字符和转义字符两种
转义字符:在特定的一个或者多个符号前加\ 让符号具有特殊功能或者特殊意义
那么这种带有\字符就是转义字符
'''
\n 换行 (相当于回车)
\t 水平制表符(相当于Tab)
\' 表示一个单引号
\" 表示一个双引号
\\ 表示一个反斜杠
'''
注意:任意一个转义字符长度为1
除了转义字符以外的字符都是普通字符
普通字符在字符串中表示符号本身
str1 = 'abc\n123'
print(str1)
str2 = 'abc\'123'
print(str2)
str3 = "abc\"123"
print(str3)
str4 = "\"哈喽你好!\""
print(str4)
str5 = "\t我是一个反斜杠\\"
print(str5)
特殊的转义字符—编码字符:\u后面跟四位的十六进制数
表示十六进制数对应的编码值对应的字符
_str = "abc\ua222"
print(_str) # abcꈢ
字符编码
计算机在存储数据的时候只能存储数字(存的数字二进制编码)
为了能够让计算机存储字符,每一个字符都对应固定一个数字
那么每个字符对应的固定的数字就是这个字符的编码值
字符编码表:
记录字符和数字之间一一对应关系的表就是字符编码表
常见的字符编码表有两种:ASCII码表,Unicode编码表(python采用的是Unicode编码表)
Unicode编码表包含了ASCII码表
ASCII码表总共有128个字符对应的编码,主要包含的是美国的
通用符号,其中包括:英文标点符号,数字字符,字母以及一些其他符号
ASCII码表中,数字字符在字母前面,大写字母在小写字母的前面
大写字母和小写字母之间有间隔
A -> a 大写与小写之间间隔32
Unicode编码表
中文编码范围:4e00~9fa5 (16进制)
print('\u9ba1') # 鮡
a = 1
# chr(编码值) 获取编码值对应的字符
print(chr(0x9ba1)) # 鮡
print(chr(0x4e00)) # 一
# 遍历编码中所有的中文
'''
for i in range(0x4e00,0x9fa5):
print(chr(i),end='')
a+=1
if a % 25 ==0:
print()
'''
# ord (字符) 获取字符对应的编码值(返回的是十进制数)
print(ord('大'), ord('爷')) # 22823 29239
print(hex(22823), hex(29239)) # 0x5927 0x7237
# 获取字符 字符串获取字符和列表获取元素的方法一样
setence = 'you are beautiful!'
print(setence[0]) # 下标获取y
print(setence[8:-1]) # 切片获取 beautiful
print(setence[::-1]) # 反向输出 !lufituaeb era uoy
# 遍历
setence = '你好!'
for i in setence:
print(i)
for i, j in enumerate(setence):
print(i, j)
# 加法和乘法
print('abc' + '123456') # abc123456 将多个字符串拼接
print('*' * 5) # ***** 重复5次产生一个新的字符串
# 比较大小 : 两个字符串比较大小,比较第一对不相等的字符编码值的大小
print('abc' > 'ABC') # True
print('abc' > '你好!') # False
判断
x
‘a’<=x<=‘z’ 判断是否是小写
‘A’<=x<=‘Z’ 判断是否是大写
‘a’<=x<=‘z’or ‘A’<=x<=‘Z’ 判断是否是英文
‘\u4e00’<=x<=’\u9fa5’ 判断是否是中文
‘0’<=x<=‘9’ 判断是否是数字
# 练习 输入一个字符串,统计字符串中小写字母的个数
zfc = input('请输入:')
count = 0
for i in zfc:
if 'a' <= i <= 'z':
count += 1
print(count)
# 练习:输入一个字符串,删除所有的中文字符
zfc = input('请输入:')
zfc1=''
for i in zfc:
if '\u4e00' <= i <= '\u9fa5':
print()
else:
zfc1+=i
print(zfc1)
大小写转换
zfc = 'abcAB'
zfc_up = zfc.upper()
print(zfc_up) # ABCAB
zfc_lo=zfc_up.lower()
print(zfc_lo) # abcab