从入门到入狱-------集合和字符串

入门 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

猜你喜欢

转载自blog.csdn.net/weixin_44628421/article/details/108873602
今日推荐