Python---元组---字典---集合

2023-05-16

4.3. 元组

        4.3.1. 概念:

           在大型的商业网站或游戏设计中,列表是一种非常重要的数据类型,因为其记录了各种等级客 户、游戏角色,列表数据可以随时变动更新, python还提供另一组数据类型成为元组
(tuple),这种数据类型结构与列表完全相同,但 最大差异是元素的值和个数不可更改,又 称不可变列表
        元组(tuple )使用圆括号()将一组不可变的 数据序列组合起来形成序列

4.3.2. 元组中不允许的操作:

        修改、新增元素
        删除元素(但可以删除整个元组)
        所有会对元组内部元素发生修改动作的方法。例
        如,元组没有remove append pop 等方法

4.3.3. 元组操作

        创建格式:tuplename=(element1 ,  element2 , ……, elementn) 元组中元素个 数无限制,类型可以都不相同,例:
num1 = (2, 3, 4, 5, 6)
num2 = (1,)  # 创建一个元素的元组,重要
num3 = (1)  # 不是元祖,只是数值为1的对象
num4 = ()  # 空元组
num5 = tuple(range(0, 20, 2))  # 使用
# tuple()函数创建数值元祖,当前为偶数元组
string1 = ('china', 'hello', 'world')
string2 = (82, 'python', [1, 2, 3, 4])

string3 = 'python', '你好', '人生苦短'
# (注意:圆括号可以省略)
删除整个元组: del tuplename
元组是不可变序列,不支持单个元素修改,但可以重新整体赋值修改
tup1 = (12, 34.56)
tup2 = ('abc','xyz')
tup1[0] = 100 # 报错
tup1 = (23, 45, 78) # 整体重新赋值
tup3 = tup1 + tup2
元组只保证它的一级子元素不可变,对于嵌套的 元素内部,不保证不可变!
tup = ('a','b', ['A','B'])
tup[2][0] ='X'
tup[2][1] ='Y'
print(tup) # 显示:('a','b', ['X','Y'])
元组连接时必须维持元组,不能字符串或列表等
tup1 = (1, 2, 3)
list1 = [4, 5, 6]
tup2 = tup1 + list1 # 报错
tup3 = tup1 +'china' # 报错

元组连接只有一个元素的元组时,必须加逗号

tup1 = (1, 2, 3)
tup2 = tup1 + (4) # 报错 改为
tup2=tup1+(4,)
元组的读取 : 定义元组时使用(),若要读取元组 内容还是和列表一样使用 [ ] 配合索引完成读取
num1 = (1, 2, 3, 4, 5)
str1 = ('apple','orange')
print(num1[0], str1[1])
元组切片 : 与列表切片操作方式相同
import random

tp1 = tuple(random.sample(range(30),10))
print(tp1)
print(tp1[1:3])
print(tp1[:4])
print(tp1[5:])
print(tp1[-2:])
print(tp1[-3:3:-1])
print(tp1[0:5:3])
元组方法与函数:列表上会更改内容的函数都无 法使用
# 下列程序报错
 tp1 = (123,'hello','asckii')
num = tp1.pop() # pop() 函数用于随机移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
tp1 = (123,'hello','asckii')
print(len(tp1)) # len()正常使用
列表与元组数据互换
        list():转为列表
        tuple():装转为元组
tp1 = (123,'hello','999', 35.6)
list1 = list(tp1)
list1.append('china')
print(list1)
tp1 = tuple(list1)
print(tp1)

4.3.4. 元组与列表的区别

        元组与列表都属于序列,都可以按照特定顺序存 储一组数据,类型不受限制
        列表类似使用铅笔在纸上书写的文字,可以擦 掉,元素类似钢笔写下的文字,不可擦除,只能 换一张纸重写

区别

        列表为可变序列,元素可以随时修改和删除, 元组为不可变序列,元素不可修改和删除,除 非整体替换
        元组不支持append() extend() insert() 方法进行添加删除操作
        元组和列表一样支持切片操作,但仅能通过切 片进行访问
        元组比列表结构简单,占用资源少,程序运行速度快
        元组比列表安全,若存储一组不可修改的数据则可以使用元组

4.4. 字典

        4.4.1. 概念:字典属于可变序列,使用 -key-value)的方式配对存储数 据,类似于新华字典中的拼音-汉字关系。

        4.4.2. 格式:dictionary={key1value1 key2value2 ……keynvaluen}

  •  dictionar为字典名称
  •  字典使用花括号{}作为标志
  •  key1、key2……keyn为元素的键,必须唯 一,且不可变,可以是字符串、数字、元组
  •  value1、value2……valuen:为元素的值,可为任意数据、不需要唯一

4.4.3. 字典创建示例:

dict1 = {'andy': 1001,'fox': 1002,'alice': 1003}
dict2 = {} # 创建空字典
dict3 = dict() # 使用dict()方法创建空字典
name = ["春香","秋兰","夏凝","翠花"]
sign = ["天平座","射手座","金牛座","双鱼座"]
dict4 = dict(zip(name, sign)) #使用
zip()函数将列表或元组对应的元素组合为字典
dict5 = dict(a=98.5, b=44.6, c=55.9,
d=88.7)
print(dict1,'\n', dict2,'\n',dict3,'\n', dict4,'\n', dict5)
# 键值赋值方法创建,使用key=value时,key不能为常量,必须为标识符

4.4.4. 增加字典元素

格式: dictname[ ]=
例:
dict1 = {'西瓜': 5,'香蕉': 8,'荔枝':10}
dict1['橘子'] = 6
dict1['荔枝'] = 12
print(dict1)
4.4.5. 删除字典
  • del 字典名[]:删除特定元素
  • dictionary.clear() :清空字典全部元素
  • del 字典名 : 删除字典
dict1 = {'西瓜': 5,'香蕉': 8,'荔枝':10}
del dict1['西瓜']
print(dict1)
dict1.clear()
print(dict1)
del dict1

4.4.6. 访问字典:dictionary[]

dict = {'Name': 'Zara','Age': 7,'Class': 'First'}
print("dict['Name']: ", dict['Name'])
print("dict['Age']: ", dict['Age'])

4.4.7. 字典的复制

  • 作用:为了保护原先字典的内容
  • 格式:new_dictname = dictname.copy()
dict1 = {'西瓜': 5,'香蕉': 8,'荔枝':10}
dict2 = dict1.copy()
print(dict1)
print(dict2)
print(id(dict1), id(dict2)) # 深拷贝,新字典地址独立

4.4.8. 使用get()方法获取指定的键值

  • 格式:dictionary.get(key , default )
  • key:指定键
  • default:可选,用于指定键不存在时,返回的默认值,若省略则返回None
dict1 = {'Name': 'Zara','Age': 7,'Class': 'First'}
print(dict1.get('Age'))
print(dict1.get('score','无此选项'))
# 访问的键若不存在,则执行default

4.4.9. 字典的遍历

  • 格式1:遍历值,items()方法

         for i in dictionary.items(): 处理i

  • 格式2:键:值方法,items()

        for key , value in dictionary.items():

                处理key 与 value

name = ["春香","秋兰","夏凝","翠花"]
sign = ["天平座","射手座","金牛座","双鱼座"]
dict1 = dict(zip(name, sign))
for i in dict1.items():
print(i)
for i, j in dict1.items():
print(i,"的星座是:", j)
  • 格式3:遍历字典的键,keys( )方法
        for key dictname.keys( ):
                处理
players = {'张三': 77.5,'李四': 55.9,'王五': 89.2}
for name in players.keys():
print('姓名:', name)

注意1:不允许同一个键出现两次。创建时如果同 一个键被赋值两次,后一个值会被记住

dict1 = {"num": 1001,"score": 98.5,"num": 1002}
print(dict1) # 结果:{'num': 1002,'score': 98.5}

注意2:键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行

dict1 = {["num"]: 1001,"score": 98.5}
print(dict1) #报错

4.4.10. 常见方法:getitemskeysvalues是核心

4.4.11. 字典内含列表元素

列表存储在字典中时此列表为该字典某键的值, 需要使用嵌套循环完成遍历,外层循环取得字典 的键,内层循环将含列表的值拆解
sports = {'andy': ['篮球', '足球', '橄榄球'], 'jenny': ['体操', '游泳'], 'fox': ['羽毛球', '乒乓球', '棒球', '骑行']}
for name, na_sport in sports.items():  # 键:值复制给name, na_sport
    print('%s喜欢的运动是:' % name, end=' ')
for sp in na_sport:  # 单独处理列表
    print(' ', sp, end=' ')
print()

4.4.12. 字典内含字典

字典允许将字典存储在字典内,此时字典将是该 字典某个键的值
wechat = {'001': {'last_name': '张三', 'first_name': '张三丰', 'city': '西安'},
          '002': {'last_name': '李四', 'first_name': '李时珍', 'city': '咸阳'}}
for num, name in wechat.items():
    print('账号:', num, end=' ')
print('姓名:', name['first_name'], end=' ')
print('住址:', name['city'])

4.4.13. 字典的fromkeys()方法

  • 作用:建立字典的一种方法
  • 格式:dictname=dict.fromkeys(seq , value)
  • seq:建立字典的列表,默认为键
  • value:字典的值,若省略则为None
sq = ['name','city']
dict1 = dict.fromkeys(sq)
print(dict1)

4.5. 集合

4.5.1. 概念:集合是一个无序不重复元素 的集

4.5.2. 功能:关系测试和消除重复元素

4.5.3. 集合使用大括号({})框定元素,并 以逗号进行分隔。

4.5.4. 格式1setname={value1value2……valuen}

set1 = {1, 2, 3, 4, 5}
set2 = {"name","num","age","score"}
# 集合本质为无序可变集合,输出时顺序可能不同
set3 = set("命运给予我们的不是失望之酒,而是机会之杯") # 使用set()函数创建
set4 = set([1.2, 3.4, 5.6, 7.8]) # 使用set()函数创建
set5 = set() # 为set(),不能为{}
set6 = set(("apple",)) #必须增加逗号
print(set1,'\n',set2,'\n',set3,'\n',set4,'\n',set5,'\n',set6)

4.5.5. 集合应用的核心:去重

  • 大数据中海量数据去重时只需要使用python集合功能即可
list1 = [1, 1, 2, 3, 4, 3, 2, 2, 1, 2,3, 3, 3, 2, 2, 3, 2, 2, 5, 6, 4, 7, 5,6, 4, 7, 9, 8,7, 8, 9]
x = set(list1)
list1 = list(x)
print(list1)

4.5.6. 集合的添加和删除

  • 添加元素:setname.add(element)
set1 = set(["java","C","c#","android"])
set1.add("python")
print(set1)
set1.add("C") # 添加重复值无用
print(set1)
删除元素
set1 = set(["java","C","c#","android","python"])
print(set1)
set1.remove("java") # 删除指定元素
print(set1)
set1.pop() # 随机删除一个元素
print(set1)
set1.clear() # 清空
print(set1)
4.5.7. 集合的交集、并集、差集运算
交集: &

 并集:|

 差集:-

对称差集: ^ , 获得 A B 两个集合,同事排除共同

 1
 

set1 = set("abcdefg")
set2 = set("efghijk")
print(set1 & set2)
print(set1 | set2)
print(set1 - set2)
print(set1 ^ set2)

4.5.8. 集合判断是否相等

  • 符号:== =
  • 返回值:True False
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
C = {1, 2, 3, 4}
print(A == B, A == C)

4.5.9. 其它操作:in not in add() copy() remove() pop() clear() max() min() sum() len()sorted()

4.5.10. 特殊操作

  • isdisjoint():两个集合没有共同元素则返回True

A = {1, 2, 3, 4}
B = {5, 6, 7, 8}
print(A.isdisjoint(B))
  • issubset():测试是否为子集

A = {1, 2, 3, 4}
B = {1, 2, 3, 4, 5, 6, 7, 8}
print(A.issubset(B))
  • issuperset():测试是否为父集

A = {1, 2, 3, 4, 5, 6, 7, 8}
B = {1, 2, 3, 4}
print(A.issuperset(B))
  • update():将一个集合加到另一个集合内容
A = {1, 2, 3, 4}
B = {5, 6, 7, 8}
A.update(B)
print(A)
  • difference_update():删除集合内与另一个集合重复的元素
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
A.difference_update(B)
print(A)

4.5.11. 冻结集合(frozenset

        概念:set 是可变集合, frozenset 是不可变集合 也称为冻结集合,定义好之后内容不可更改,操 作参照元组
x = frozenset([1, 3, 5])
y = frozenset([5, 7, 9])
print(x, y)
print(x & y, x | y, )

4.5.12. 查看集合的操作方法:dir(set)

print(dir(set))

print(dir(list))

4.6. 列表、元组、字典、集合区别

数据结构是否可变是否重复是否有序定义符号
列表(list)可变可重复有序        []
元组(tuple)不可变可重复有序        ()
字典(dict)可变可重复无序{key:vlaue}
集合(set)可变不可变无序         { }

4.7.字符串

4.8.1概念:字符串是由''或'' ''包裹起来的任意不可变文本序列,双引号'


print('吉多,范罗苏姆外号"龟叔"')



str1='china'  #字符串    不可变
print(str1[0])
str1[1]='H'

str2=['china','hello','nihao']  #字符串列表
str2[0]='CHINA'

4.8.2.拼接字符:+

str1 = '我今晚跑步'
num = 3200
print(str1 + str(num))
#注意:字符串的拼接对象只能是字符串

4.8.3多行字符串

字符串长度多于一行时,可以使用三引引号将字符串夹

str1 ='''china china china
china china 
china china china'''
print(str1)

4.8.4.字符串的切片

原则:字符串属于不可变序列,可以通过切片实现字符截取

格式:strname[start,end,step]

start:从0索引开始

end:最后一个字符串的索引(不包含)

step:切片长度,默认为1

str1='2022,加油,中国'
print(str1) 
print(str1[0])
print(str1[0:])
print(str1[5:])
print(str1[0:3])
print(str1[2:6])
print(str1[1:10:2])
print(str1[-1:-3:-1])

例1:输入员工身份证号,输出出生日期

id=(input("请输入身份证号:"))
#str1='412702199505053678'
print(id[6:10])
print('你的身份证号是:',id)
if int(id[16])%2==1:
    print('性别:男')
else:
    print('性别:女')
print('输出日期:'+id[6:10]+'年'+id[10:12]+'月'+id[12:14]+'日')

4.8.5.分割合并字符串

分割:将字符串分割为列表

格式:strname.split(sep,maxsplit)

        sep:指定分割符,可以包含多种符号(空格,\n,\t 等),默认为None

maxsplit:指定分割次数

str1='python 软件官网 >>> https://www.python.org/'
print('原串:',str1)
list1=str1.split()
list2=str1.split('>>>')
list3=str1.split('.')
list4=str1.split(" ",3)
print(list1,list2,list3,list4,sep='\n')




原串: python 软件官网 >>> https://www.python.org/
['python', '软件官网', '>>>', 'https://www.python.org/']
['python 软件官网 ', ' https://www.python.org/']
['python 软件官网 >>> https://www', 'python', 'org/']
['python', '软件官网', '>>>', 'https://www.python.org/']
  • 合并字符串:将多个字符串采用固定的分割符进行连接
  • 格式:strnew=string.join(iterable)
  • strnew:新串名称
  • string:合并时的分隔符
  • iterable:可迭代对象,即被合并的字符串

4.8.6字符串查找

count()方法

作用:检索字符串在另一串中出现的次数,若不存在返回0

格式:strname.count(substring) substring 为要检索的字符串

str1='***ABC***def***'
cn1=str1.count('*')
cn2=str1.count('?')
print('次数:',cn1,cn2)
str1='aaaaaaaaaa'
cn1=str1.count('aa')
print('次数:',cn1,)

find()方法

作用:检索是否包含指定字符串,若不存在则返回-1,否则返回首次出现的索引值

格式:strname.find(sub)

str1=input('输入主串:')
str2=input('输入子串:')
num=str1.find(str2)
if num > -1:
    print('存在,第一次出现的索引:' ,num)
else:
    print('不存在')

注意:find()一般用于在主串中查找子串是否存在,还可以使用in实现

str1=input('输入主串:')
str2=input('输入子串:')
print(str2 in str1)
  • startswitch()方法:检索字符串是否可以指定字符串开头
  • endswitch()方法:检索字符串是否可以指定字符串结尾

4.8.7.字母大小写转换

  • 大写>小写:strname.lower()
  • 小写>大写:strname.upper()
  • 大小写互换函数:strname.swapcase()
str1=input()
print(str1.upper())

4.8.8.判断是否为字母

格式;strname.isalpha()

成立返回True,否则返回False

例:判断字符串中字母出现的次数

str1=input('请输入字符串:')
cnt={}   #定义空字典
for i in  str1:
    if  i.isalpha()==True:
        #get(i,0)计算i对应的值
        cnt[i]=cnt.get(i,0)+1
print(cnt)



请输入字符串:12asdcasda
{'a': 3, 's': 2, 'd': 2, 'c': 1}

4.8.9.字符串删除

  • strname.strip(char):删除字符串左右指定字符
  • strname.lstrip(char):删除字符串左则指定字符
  • strname.srtrip(char):删除字符串右则指定字符
  • 默认删除所有空白字符(\n  \t  \r   空格)

例1:统计字符串中单词个数

str1 = input('请输入字符串:')
str1 = str1.strip()  # 删除左右两侧的空格
cnt = 1
i = 0
while i < len(str1) - 1:
    if str1[i] != ' ' and str1[i + 1] == ' ':
        cnt += 1
    i += 1
if str1 == '':
    cnt = 0
print('单词个数:', cnt)
  • strname.replace('需替换字符串',‘替换结果’)
str1='***ABC***123***'
print(str1.replace('*','?'))



???ABC???123???

4.8.10.字符串文本对齐

方法:

        center:居中

        ljust:左对齐

        rjust:右对齐

4.8.11.程序案例

例1编写程序,检测输入的字符串密码是否是一个合法的密码。规则如下:

密码必须至少8个字符

密码只能包含英文和数字

密码至少包含2个数字

str1=input('请输入密码:')
t=0
for i in str1:
    if  i.isdigit():  #判断字符串是否是数字
        t+=1
if len(str1)>=8:
    if str1.isalnum():  #判断字符串是否包含字母和数字
        if t>2:
            print('密码正确')
        else:
            print('密码包含的数字至少于2个')
    else:
        print('密码只能包含字母和数字')        
else:
    print('密码至少要有8个字符')

例2:编写程序:实现输入二进制数转为十进制

如:1001十进制为9,即执行1*2

str1=input('请输入二进制:')
d1=0 #接收转换结果
t=0  #权值
f=1
if str1.isnumeric():   #判断字符串至少有一个字符且所有字符均
    str2=str1[::-1]   #str2存储逆序
    for i in str2:
        if i=='1' or i=='0':
            d1=d1+int(i)*2*t
        else:
            print('无效数字')
            f=0
            break
        t+=1  #权值加1
    if  f:
        print(str1,'转为十进制整数:',d1)
3 :国际标准书号包含 10 个数: d1d2d3d4d5d6d7d8d9d10, 最后一个 d10 位校验位,计算公式:
根据规范,若 d10 计算结果为 10 ,则使用 X 示,编写程序,输入前 9 个内容的字符串,输 出标准书号

str1=input('请输入国际标准书号前9位:')
check=0
t=1
for i in str1:
    check=check +int(i)+t
    t+=1
check%=11
if check ==10
    check='x':
print(str1+str(check))
4 :统计字符串中字母个数存储到列表 b[26] 中, a 个数存储到 b[0],b 个数存储到 b[1],z 个数存储到 b[25]
str1=input('请输入英文字符串')
b=[0]*26  #b列表全部清零
str1=str1.lower()  #大转小写字母
for i in str1:
    if i.isalpha():  #判断是否是字母
        b[ord(i)-97]+=1  #当前字母ascii值减去首字母ascii值序号
print(b)

方法二

str1=input('请输入英文字符串')
b=[0]*26  #b列表全部清零
str1=str1.lower()  #大转小写字母
for i in  range(26):
    b.append(str1.count(chr(97+i)))
print(b)

例;将字符串中大小写字母改写为下一个字母,Z字母改为A

str1 = input('请输入英文字符串')
for i in str1:
    if i >= 'A' and i <= 'Y':
        i = chr(ord(i) + 1)
    else:
        if i == 'Z':
            i = 'A'
    print(i, end='')

上例改为:将大写字母改为上一个,A改为Z

例6:将2个串逆置后交叉合并到新串中,如:str1:abcdef  str2:12345678.  str3:

str1 = input('请输入英文字符串')
str2 = input('请输入英文字符串')
print(str1)
print(str2)
str1 = str1[::-1]
str3 = ''
i = 0
j = 0
while i < len(str1) or j < len(str2):
    if i < len(str1):
        str3 += str1[i]  # 拼接
    if j < len(str2):
        str3 += str2[i]
    j += 1
    j += 1
print(str3)

例7:字符串排序,python中字符串类不允许直接修改元素,需要将其转为列表在后进行排序,排完后转回字符串

str1='987654321'
list1=list(str1)
list1.sort()
str1=''.join(list1)
print(str1)
print(type(str1))

例8:排除字符串首尾2个元素,剩余内容排序

str1=input('请输入一个字符串')
str2=str1[1:len(str1)-1]
list1=list(str2)
list1.sort()
str2=''.join(list1)
print(str1[0]+str2+str1[len(str1)-1])

4.8.12.格式化字符串

概念:格式化字符串是指定一个模板,该模板流出空位,在根据需要填上相应的内容

通过操做%实现:''%[-][+][0][m][.n]'%格式化字符exp

参数说明:

[]:表示内容可选

-:右对齐

+:右对齐

0:右对齐,用0填充空白,一般配合参数m使用

m:宽度

n:小数保留位数

%格式化字符如下表:

格式化作用格式化字符作用
%s 字符串%r字符串
%c单个字符%o八进制
%d   %i十进制%e指数
%x十六进制%E指数
%f %F浮点数%%字符

str1 = '编号:%05d\t公司名称:%s官网:https://www.%s.com'
str2 = (1, '百度', 'baidu')
str3 = (2, '腾讯', 'qq')
str4 = (3, '字节跳动', 'bytedance')
print(str1 % str2)
print(str1 % str3)
print(str1 % str4)

4.8.13通过format()方法实现

  • Python2.6版本以后推荐使用format()方法格式化字符串
  • 格式:str.format(args)
  • 参数分析
    • str:字符串显示的样式即模板
    • args:需要转换的对象,若有多项可以使用逗号分隔
  • 占位符:{}和:
  • 模板格式:{index:fill  aglin  sign   #   width.percision  type}
    • index:索引位置,从0开始,若省略则自动分配
    • fill:空白填充的字符
    • aglin:对齐方式,一般与width匹配使用
    • <:左对齐
    • >:右对齐
    • =:内容右对齐,只有数字类型有效,即将数字放在填充字符的最右则
    • ^:内容居中
    • sign:指定有无符号:
    • +:正数
    • 负数
    • 空格:正数加正号,负号加符号

        #:值为二,八,十六进制时,数字显示0b,0o,0x的前缀

        wifth:宽度

        .percision:保留的小数位数

        type:类型

str1 = '编号:{:0>5s}\t公司名称:{:s}官网:https://www.{:5}.com'
str2 = str1.format('1', '百度', 'baidu')
str3 = str1.format('2', '腾讯', 'qq')
str4 = str1.format('3', '字节跳动', 'bytedance')
print(str2)
print(str3)
print(str4)
import  math
print('¥{:,.2f}元'.format(2596+3874) )
print('{0:E}'.format(53000000.2))
print('{:.7f}'.format(math.pi))
print('二进制:{:#b}'.format(1001))
print('八进制:{:#o}'.format(1001))
print('十六进制:{:#x}'.format(1001))
print('天才是由{:.0%}的灵感,加上{:.0%}的汗水!'.format(0.01,0.99))

4.8.14.Python常见的字符串编码

  • ASCII码:对10个数字,256英文大小写字母,其他字符进行编码,最多表示256个字符,每个字符占1b
  • GBK\GBK2312:中文汉字编码,1b表示英文子母,2B表示汉字
  • Unicode和utf-8的关系
    • Unicode:称为万国码,统一码,用于满足跨语言,跨平台的文件转换处理要求
    • unicode:包含全球所有国家的字符编码的映射关系,已达到编码的统一使用
    • unicode表示字符太浪费空间,为了解决字符的存储和传输问题而产生了UTF-8编码
  • UTF:(unicode   transformation   format):对unicode进行转换,以便于在存储和传输时节省空间和时间
    • UTF-8:使用1,2,3,4个字节表示字符,有先使用1B表示字符,无法满足时增加1B,,最多4B,英文占1B,欧洲语系占,2B,东亚语系占3B,其他的特殊字符占4B
    • UTF-16:使用2,4字节表示字符
    • UTF-32:使用4B表示字符
    • 总结:UTF 编码时为UNICODE编码设计的一种在存储和传输时节省空间的编码方案
  • python的2种字符串类型
    • str:在内存中使用unciode表示字符串
    • bytes:字节类型,网络传输或存储时磁盘使用二进制数据表示,以b开头如”

                b'\xs2\xb0'

  • 使用encode()方法编码        
    • 作用:将字符串转为二进制(bytes)数据
    • 格式:strname。encode(encoding=)
str1='书山有路勤为径'
by1=str1.encode('GBK')
by2=str1.encode()
print('原串:',str1)
print('转为GBK:',by1)
print('转为UTF-8:',by2)
  • 使用decode()解码        
    • 解码:将bytes类型二进制数据转换为字符串
    • 格式:bytes.decode(endcoding='UTF-8')
str1='学海无涯苦作舟'
by1=str1.encode('GBK')

print('解码后:',by1.decode('GBK'))

4.9.正则表达式

4.9.1.正则表达式用于描述字符串的复杂文本规则的代码,一般用于查询匹配

4.9.2常见元字符

作用表示特殊含义,一般为范围性,不好确切描述的字符串

单个字符匹配的元字符

字符功能
.匹配任意1个字符
[]
\d匹配0-9数字
\D匹配非数字
\s匹配空白(空格,tab)
\S匹配非空白
\w
\W匹配非\W的字符

 数量元字符

 

字符功能
*
?

+

{m}
{m,}
{m,n}

边界字符 

字符功能
 ^行首
$行尾
\b匹配单词的开始或结束,分解符为空格
\B匹配非单词边界

分组元字符

字符功能
I匹配左右两边任意一个表达式
(ab)将括号中的字符作为一个分组

4.9.3.实例

  • 匹配8位qq号
^\b{8}$
  • 匹配任意元音字母
[aeiou]
  • 匹配身份证号:18位,前17位为数字,最后一位为x或X进行校验
(^\d{17})(\d|X|x)$
  • 匹配输入的163,126,qq,邮箱,前面至少5位最多11位
\w{5,11}@(163|126|qq.com)\.(com|cn)

r'\w{5,11}@(163|126|qq.com).(com|cn)'
  • 检索python文件名位:xxxx.py
r'\w+\.py\b'

 4.9.4.re模块

需要加载:import    re

math() 方法

        格式:re.math(pattern,string,[flags])

        作用:从字符串起始位置起开始查找匹配,成功返回math对象,否则返回None。只能匹配一个

        pattern:使用正则表达式表示的模式字符串

        string:要匹配的字符串

        flags:可省略,表示标准位,控制匹配方法,如:是否区分大小写子母等

标准作用
AASCII码匹配
I不区分大小写字母
M将^和$应用于一行
S使用(.)匹配所有字符
X忽略空格,注释等

例:匹配字符串是否以mr——开头,不区分大小写

import  re
p=r'mr_\w+'  #模式字符串
str1='MR_SHOP mr_shop'
str2='MR_SHOP mr_shop'
m=re.match(p,str1,re.I)
print(m)

#返回的对象多功能方法
print('匹配值的起始位置:' ,m.start())
print('匹配值的结束位置:' ,m.end())
print('匹配值的元组:' ,m.span())
print('匹配值的数据:' ,m.group())

#只能在起始位置匹配
str1='123MR_SHOP mr_shop'
n=re.match(p,str2,re.I)
print(n)  #None

import  re
m=input('请输入手机号:')
p=fr'(13[4-9]\d{8})$|(15[01289]\d{8})$'
mt=re.match(p,m)
if  mt==None:
    print('不是移动号段')
else:
    print('是有效的中国移动手机号')

search()方法匹配

import re

p = r'mr_\w+'  # 模式字符串
str1 = '123MR_SHOP mr_shop'
m = re.search(p, str1, re.I)
print(m)

findall()方法

        作用:在字符串中检索所有符合正则表达式规则的字符串,并

  格式:re.math(pattern,string,[flags])

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python---元组---字典---集合 的相关文章

  • 类的 IPython 表示

    我正在使用我创建的模块尝试 IPython 但它没有显示类对象的实际表示 相反 它显示类似的内容 TheClass module TheClass name I heavily在这个模块中使用元类 我有真正有意义的类表示 应该向用户显示 是
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • matplotlib 图中点的标签

    所以这是一个关于已发布的解决方案的问题 我试图在我拥有的 matplotlib 散点图中的点上放置一些数据标签 我试图在这里模仿解决方案 是否有与 MATLAB 的 datacursormode 等效的 matplotlib https s
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • 从Django中具有外键关系的两个表中检索数据? [复制]

    这个问题在这里已经有答案了 This is my models py file from django db import models class Author models Model first name models CharFie
  • python multiprocessing 设置生成进程等待

    是否可以生成一些进程并将生成进程设置为等待生成的进程完成 下面是我用过的一个例子 import multiprocessing import time import sys def daemon p multiprocessing curr
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • MongoEngine 查询具有以列表中指定的前缀开头的属性的对象的列表

    我需要在 Mongo 数据库中查询具有以列表中任何前缀开头的特定属性的元素 现在我有一段这样的代码 query mymodel terms term in query terms 并且这会匹配在列表 term 上有一个项目的对象 该列表中的
  • 从 Powershell 脚本安装 Python

    当以管理员身份从 PowerShell 命令行运行以下命令时 可以在 Windows 11 上成功安装 Python c temp python 3 11 4 amd64 exe quiet InstallAllUsers 0 Instal
  • 使用 Python Oauthlib 通过服务帐户验证 Google API

    我不想使用适用于 Python 的 Google API 客户端库 但仍想使用 Python 访问 Google APIOauthlib https github com idan oauthlib 创建服务帐户后谷歌开发者控制台 http
  • 导入错误:没有名为flask.ext.login的模块

    我的flask login 模块有问题 我已经成功安装了flask login模块 另外 从命令提示符我可以轻松运行此脚本 不会出现错误 Python 2 7 r27 82525 Jul 4 2010 07 43 08 MSC v 1500
  • 无法导入 langchain.agents.load_tools

    我正在尝试使用 LangChain Agents 但无法导入 load tools 版本 langchain 0 0 27 我尝试过这些 from langchain agents import initialize agent from
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • python 中的“槽包装器”是什么?

    object dict 和其他地方的隐藏方法设置为这样的
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 每当使用 import cv2 时 OpenCV 都会出错

    我在终端上使用 pip3 install opencv contrib python 安装了 cv2 并且它工作了 但是每当我尝试导入 cv2 或运行导入了 cv2 的 vscode 文件时 在 python IDLE 上它都会说 Trac
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • 如何将Python3设置为Mac上的默认Python版本?

    有没有办法将 Python 3 8 3 设置为 macOS Catalina 版本 10 15 2 上的默认 Python 版本 我已经完成的步骤 看看它安装在哪里 ls l usr local bin python 我得到的输出是这样的
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS

随机推荐

  • 靠写作能挣100万吗

    不要被标题吓到 xff0c 今天说的就是关于写作 Fenng大说 xff0c 同等能力的人绝对要文字写得好的 帅张说编程 英语 写作是程序员的3大底层能力 写作能给我带来什么 xff1f 王朔曾说 xff0c 写作是一条狗 xff0c 只要
  • “老赖”罗永浩被群嘲:莫欺少年穷,莫笑中年败,莫嘲梦想狂

    原文链接 xff1a https mp weixin qq com s x0fIynaA2hPi7blUoeYGxA 作者 l 粥左罗 来源 l 粥左罗的好奇心 xff08 ID xff1a fangdushe007 xff09 转载请联系
  • L16-分析数据库中的左连接

    许久以来 xff0c 在写表的左联接条件的时候 xff0c 似乎已彻底习惯了在右表上设置联接条件 今天意外发现居然也可以在左表上设置 xff0c 而且顺势借用到了需求实践中 重新翻看下官方文档的说明 xff0c 暂且也算温故而知新了 联接类
  • 高知的程序员必须甩脱穷人思维

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net mogoweb article det
  • L19-将多表分批次从数据库导出到Excel

    文章目录 1 应用场景2 功能事项3 主要实现概览主要方法 4 使用示例5 总结 1 应用场景 最近经常需要手工从后台数据库导出某些数据表到Excel文件 xff0c 而且源数据表的数据量大小不一 xff0c 导致在导出到本地文件这个过程中
  • L18-利用Pandas清洗与可视化时序数据

    获取时序数据并进行数据清洗与可视化分析 文章目录 获取时序数据并进行数据清洗与可视化分析1 准备工作2 加载数据3 数据处理 转化与合并4 可视化展现5 小结 1 准备工作 tushare是一个第三方财经数据接口包 xff0c 需要安装包并
  • L17-利用Pandas解析日志数据

    利用Pandas 分析日志数据 文章目录 利用Pandas 分析日志数据1 简介2 获取数据3 数据解析4 简单可视化5 小结 1 简介 app程序在日常运行中会生成多种非结构化的日志数据 xff0c 由于可读性差通常仅仅用于排错 若能将数
  • SQL Server 缓存清除与内存释放

    Sql Server系统内存管理在没有配置内存最大值 xff0c 很多时候我们会发现运行SqlServer的系统内存往往居高不下 这是由于他对于内存使用的策略是有多少闲置的内存就占用多少 xff0c 直到内存使用虑达到系统峰值时 xff08
  • 1178C C. Tiles

    C Tiles time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard output Bob is
  • L27-计算连续N天的人流量

    文章目录 写在前面1 题目2 谈谈方法3 关键词4 样例分析4 注意项 写在前面 碰到LeetCode上的一个有意思的数据库题 xff0c 看了很多解法 xff0c 但都过于复杂 经过思索后 xff0c 另辟溪径 xff0c 分享一个崭新的
  • T-SQL查询:CTE - with as 子句的特殊应用

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net kk185800961 article
  • SQL Server 缓存清除与内存释放

    Sql Server系统内存管理在没有配置内存最大值 xff0c 很多时候我们会发现运行SqlServer的系统内存往往居高不下 这是由于他对于内存使用的策略是有多少闲置的内存就占用多少 xff0c 直到内存使用虑达到系统峰值时 xff08
  • 彻底理解递归,从递归的本质说起!

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net allenchenhh133 arti
  • 程序员是不是青春饭

    本文转载 原创作者 志军100 Python之禅 有人问到程序员是不是吃 34 青春饭 34 xff0c 回答是肯定的 xff0c 没有哪个行业可以像互联网一样 xff0c 不需要背景 不需要关系 xff0c 只需要才华就有舞台 看看国内国
  • PCA 原理:为什么用协方差矩阵

    PCA的理论知识以及与K L变换的关系 PCA是主成分分析 Principal Components Analysis 的简称 这是一种数据降维技术 xff0c 用于数据预处理 一般我们获取的原始数据维度都很高 xff0c 那么我们可以运用
  • 编程语言思考系列:为什么会有这么多的编程语言?

    一 为什么会有这么多的编程语言 xff1f 不同的cpu有着不同的指令集 xff0c 这些指令集都是二进制的0和1 xff1b 后来有了汇编语言 xff0c 可以认为是二进制指令的助记符表示 xff1b 再后来有了高级编程语言 xff0c
  • 搞懂ASCII,Unicode字符集和UTF-8编码

    熟悉html等知识的都知道 xff0c html中有一个重要的字段叫 content type xff0c 一般中文网站都是设置为 utf 8 编码 xff0c 可能你还知道之所以设置为utf 8是为了正常的显示中文 xff0c 但为什么u
  • 通俗理解 - 梯度下降

    本文将从一个下山的场景开始 xff0c 先提出梯度下降算法的基本思想 xff0c 进而从数学上解释梯度下降算法的原理 xff0c 最后实现一个简单的梯度下降算法的实例 xff01 梯度下降的场景假设 梯度下降法的基本思想可以类比为一个下山的
  • Python使用requests提交HTTP表单

    立志做国内自动化 AI测试领域最好的原创公众号 欢迎微信关注公号 34 测试不将就 34 ID awesometest xff0c 更多原创文章在路上 我们的口号是 xff1a 插上自动化 AI的翅膀 xff0c 软件测试也能高大上 Pyt
  • Python---元组---字典---集合

    4 3 元组 4 3 1 概念 xff1a 在大型的商业网站或游戏设计中 xff0c 列表是一种非常重要的数据类型 xff0c 因为其记录了各种等级客 户 游戏角色 xff0c 列表数据可以随时变动更新 xff0c python还提供另一组