python进阶之路
Day7
hello world!今日是python学习的第七天,我将会在下面文章对基础语法进行一些介绍,主要为集合与字符串的学习等。
1.集合
1.1 集合的定义
集合是容器型数据类型,将{}作为容器的标志,多个元素用逗号隔开:{元素1,元素2,。。}
集合是可变的,无序的;
元素:不可变的,唯一的
空集合
x = {} # {}是空字典
print(type(x))
y = set() # 空集合
print(type(y),len(y))
###### 1) 元素是不可变的
# set1 = {12,'abc',[10,20]} 列表是可变的,会报错
###### 2) 元素是唯一的
set3 = {1,2,3,1,2,2,4}
print(set3) # 自带去重的功能。
names = ['张三','李四','王麻子','张三']
names = set(names)
print(names)
list(names)
print(names)
3) 集合是无序的
print({1,2} == {2,1})
1.2 集合的增删改查
1) 查 - 遍历
set4 = {10,20,78,95}
for x in set4:
print(x,end = ',')
2) 增
set = {10,20,78,90}
a.集合.add(元素) - 在集合中添加元素
set4.add(100)
print(set4)
b. 集合.update(序列) - 将序列中所有的元素添加到集合中。
set4.update('abc')
print(set4)
3) 删
a. 集合.remove(元素) - 删除指定元素(元素本来不存在会报错)
set4 = {10,20,30,90}
set4.remove(90)
print(set4)
b. 集合.discard(元素) - 删除指定元素(如果元素不存在不会报错)
set4 = {10,20,78,90}
set4.discard(78)
print(set4)
###### 4) 改 - 无法修改元素
1.3 数学集合运算
python中的集合支持数学的集合运算。: 子集(>,<,<=,>=)、并集(|)、交集(&)、差集(-)、对称差集(^)
1) 子集
print({100,200,300} > {10,20})
print({10,20,30} > {10,20})
print({10,20,30} >= {10,20})
2) 并集
set1 = {1,2,3,4}
set2 = {4,5,6,7,8}
print(set1 | set2)
3) 交集
set1 = {1,2,3,4}
set2 = {4,5,6,7,8}
print(set1 & set2)
4) 差集
print(set1 - set2)
print(set2 - set1)
5) 对称差集
print(set1 ^ set2)
练习:用三个列表表示三门学科的选课学生姓名(一个学生可以同时选多门课)
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('选课学生总共:',python | java | h5,len(python | java | h5))
course1 = (python - java - h5)
print('只选了第一门学科的学生有:',course1,'总计:',len(course1))
p = python - java - h5
j = java - python - h5
h = h5 - java - python
course2 = p | j | h
print('只选了一门学科的学生有:',course2,'总计:',len(course2))
course3 = python & java & h5
print('选了三门学科的学生有:',course3,'总计:',len(course3))
course4 = (python | java | h5) - course2 - course3
print('只选了两门学科的学生有:',course4,'总计:',len(course4))
2. 字符串
1.1 什么是字符串?
字符串是容器型数据类型:以‘’或者“”或者“”“”“”或者‘’‘’‘’作为容器的标志,里面多个字符
特点:不可变的(不支持增删改)、有序的(支持下标操作的)
字符串的元素:字符串的每个基本单元。字符(任何符号都可以)
# 字符串
str1 = 'abc'
str2 = "1213abc"
str3 = '''123123'''
str4 = """456asds5"""
print(str1,str2,str3,str4)
‘’’’’'和“”“”“”引起来的字符串可以直接敲回车换行
1.2 字符
python没有字符对应的类型只有字符的概念
1) 普通字符:包含所有的符号,例如:数字、字母、中文、各种图形符号等。
2) 转义字符:和\结合后具有特殊功能和特殊意义的字符,就是转义字符。(转义字符不光是python中的概念)
\n - 换行
\’ - 一个单引号
\" - 一个双引号
\ \ - 一个反斜杠
\t - 一个水平制表符(相当于恩一次tab键)
注意:任何一个转义字符长度为1
\u4位的16进制数 - 编码字符
str1 = '@@@'
str2 = '🐕'
str3 = '123\nabc'
print(str3)
poem = '鹅鹅鹅,\n曲项向天歌,\n白毛浮绿水,\n红掌拨清波'
print(poem)
str5 = '\t123abc'
print(str5)
str6 = '\u4eff356'
print(str6)
print(len(str6))
3) 阻止转义(python特有)
python中在字符串的最前面加r/R,可以让这个字符串中所有的转义字符的功能消失
str7 = '\t123\nabc\\400sd\u4eef'
str8 = r'\t123\nabc\\400sd\u4eef'
print(str7,',',str8)
4) 计算机数据存储
计算机在存储数据的时候,只能直接存储数字数据,而且以二进制的形式存储的数字。
位(bit)
1字节(byte) == 8位
1kb == 1024字节
1mb == 1024kb
1gb == 1024mb
1tb == 1024gb
5) 字符编码
a. 字符编码
为了能够让计算机存储字符,我们给每一个字符关联一个具体的数字,在需要存储字符的时候就存储字符对应的数字。
每个字符对应的数字就是字符的编码值。
b. 编码表
保存字符与数字的一一对应的关系的表就是字符编码表,常用的字符编码表有两种:ASCII码表、Unicode编码表。
b.1 ASCII码表:采用一个字节对128个字符进行编码,其中包括常用的英文符号、数字和字母。其他数字的编码在字母的前面,大写字母的编码在小写字母的前面,大写字母与小写字母不连接。
编码:0 - 9:48 ~ 57
a - z:97 ~ 122
A - Z:65 ~ 90
b.2 Unicode: 叫万国码,包含了世界上所有的国家所有的民族所有语言的符号。前128个字符就是ASCII码表中的字符。
其中中文的编码范围是:4e00 ~ 9fa5
编码字符:\u四位的16进制数 (这儿的4位的16进制数就是字母的编码值)
str1 = '\u4e00'
print('\u4e03')
chr函数
chr(编码值) - 获取编码值对应的字符
print(chr(97))
print(chr(0x4e00))
练习:打印所有的汉字
for i in range(0x4e00,0x9fa5):
print(chr(i),end = ' ')
ord函数
ord(字符) - 获取字符的编码值
print(ord('曹'),ord('峰'))
print(hex(ord('曹')),hex(ord('峰')))
6) 获取字符
字符串获取字符与列表获取元素的方法是一样的。
str1 = '人生苦短,我用python'
print(str1[5])
str2 = 'how are\n you!'
print(str2[-4],str2[9])
7) 切片
message = '曾经有一份真挚的爱情摆在我的面前,我没有珍惜。。。'
print(message[2:])
print(message[2:10:3])# 有真爱
print(message[-10:-2:-1])# ''
8) 遍历
message2 = '你以为我以为就是你以为的'
for x in message2:
print(x,end = '')
message3 = 'you jump, i jump!'
for x,y in enumerate(message3):
print(x,y)
练习:打印message3中每个字符的编码值
for i in message3:
print(ord(i),end = ',')
练习2:统计message4中中文字符的个数:
message4 = 'how are you? 我很好! 你呢?'
count = 0
print()
for i in message4:
if 0x4e00 <= ord(i) <= 0x9fa5:
count += 1
print('该信息中中文字符的个数为:',count)
9) 加法运算和乘法运算
字符串1 + 字符串2 - 将两个字符串合并产生一个新的字符串
str1 = 'abc' + '123'
print(str1)
字符串1 * N / N * 字符串 - 字符串重复N次产生一个新的字符串
str2 = 'abc' * 3
print(str2)h
10) 比较运算: >,<,>=,<=
字符串比较大小比较的是第一对不相等的字符的编码值的大小。
判断:’a‘ <= x <= ‘z’
判断:‘A’ <= x <= ‘Z’
判断:’a‘ <= x <= ‘z’ or ‘A’ <= x <= ‘Z’
判断:‘0’ <= x <= ‘9’
判断:’\u4e00’ <= x <= ‘\u9fa5’
print('abc' > 'ABC123')
练习:取出字符串中所有的小写字母
str3 = '按键布局的n,基本都是JD的b,我爱的a'
for x in str3:
if 'a' <= x <= 'z':
print(x,end = ',')
练习2:将字符串中的所有的小写字母转换成大写字母
new_str = ''
str3 = 'hu23,a后进生lor23可HMp见'
for x in str3:
if 'a' <= x <= 'z':
x = chr(ord(x)-32)
new_str += x
print(new_str)
11) in 和 not in
字符 in 字符串 - 判断字符串中是否有指定的字符
字符串1 in 字符串2 - 判断字符串2中是否包含字符串1