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', '你好', '人生苦短'
# (注意:圆括号可以省略)
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()正常使用
tp1 = (123,'hello','999', 35.6)
list1 = list(tp1)
list1.append('china')
print(list1)
tp1 = tuple(list1)
print(tp1)
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不能为常量,必须为标识符
dict1 = {'西瓜': 5,'香蕉': 8,'荔枝':10}
dict1['橘子'] = 6
dict1['荔枝'] = 12
print(dict1)
dict1 = {'西瓜': 5,'香蕉': 8,'荔枝':10}
del dict1['西瓜']
print(dict1)
dict1.clear()
print(dict1)
del dict1
dict = {'Name': 'Zara','Age': 7,'Class': 'First'}
print("dict['Name']: ", dict['Name'])
print("dict['Age']: ", dict['Age'])
dict1 = {'西瓜': 5,'香蕉': 8,'荔枝':10}
dict2 = dict1.copy()
print(dict1)
print(dict2)
print(id(dict1), id(dict2)) # 深拷贝,新字典地址独立
dict1 = {'Name': 'Zara','Age': 7,'Class': 'First'}
print(dict1.get('Age'))
print(dict1.get('score','无此选项'))
# 访问的键若不存在,则执行default
for i in dictionary.items(): 处理i
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)
players = {'张三': 77.5,'李四': 55.9,'王五': 89.2}
for name in players.keys():
print('姓名:', name)
dict1 = {"num": 1001,"score": 98.5,"num": 1002}
print(dict1) # 结果:{'num': 1002,'score': 98.5}
dict1 = {["num"]: 1001,"score": 98.5}
print(dict1) #报错
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()
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'])
sq = ['name','city']
dict1 = dict.fromkeys(sq)
print(dict1)
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)
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)
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)
并集:|
差集:-
例1:
set1 = set("abcdefg")
set2 = set("efghijk")
print(set1 & set2)
print(set1 | set2)
print(set1 - set2)
print(set1 ^ set2)
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
C = {1, 2, 3, 4}
print(A == B, A == C)
A = {1, 2, 3, 4}
B = {5, 6, 7, 8}
print(A.isdisjoint(B))
A = {1, 2, 3, 4}
B = {1, 2, 3, 4, 5, 6, 7, 8}
print(A.issubset(B))
A = {1, 2, 3, 4, 5, 6, 7, 8}
B = {1, 2, 3, 4}
print(A.issuperset(B))
A = {1, 2, 3, 4}
B = {5, 6, 7, 8}
A.update(B)
print(A)
A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
A.difference_update(B)
print(A)
x = frozenset([1, 3, 5])
y = frozenset([5, 7, 9])
print(x, y)
print(x & y, x | y, )
print(dir(set))
print(dir(list))
数据结构 | 是否可变 | 是否重复 | 是否有序 | 定义符号 |
列表(list) | 可变 | 可重复 | 有序 | [] |
元组(tuple) | 不可变 | 可重复 | 有序 | () |
字典(dict) | 可变 | 可重复 | 无序 | {key:vlaue} |
集合(set) | 可变 | 不可变 | 无序 | { } |
print('吉多,范罗苏姆外号"龟叔"')
str1='china' #字符串 不可变
print(str1[0])
str1[1]='H'
str2=['china','hello','nihao'] #字符串列表
str2[0]='CHINA'
str1 = '我今晚跑步'
num = 3200
print(str1 + str(num))
#注意:字符串的拼接对象只能是字符串
字符串长度多于一行时,可以使用三引引号将字符串夹
str1 ='''china china china
china china
china china china'''
print(str1)
原则:字符串属于不可变序列,可以通过切片实现字符截取
格式: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]+'日')
分割:将字符串分割为列表
格式: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/']
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)
str1=input()
print(str1.upper())
格式;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}
例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)
str1='***ABC***123***'
print(str1.replace('*','?'))
???ABC???123???
方法:
center:居中
ljust:左对齐
rjust:右对齐
例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)
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))
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])
概念:格式化字符串是指定一个模板,该模板流出空位,在根据需要填上相应的内容
通过操做%实现:''%[-][+][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)
#:值为二,八,十六进制时,数字显示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))
b'\xs2\xb0'
str1='书山有路勤为径'
by1=str1.encode('GBK')
by2=str1.encode()
print('原串:',str1)
print('转为GBK:',by1)
print('转为UTF-8:',by2)
str1='学海无涯苦作舟'
by1=str1.encode('GBK')
print('解码后:',by1.decode('GBK'))
4.9.2常见元字符
作用表示特殊含义,一般为范围性,不好确切描述的字符串
单个字符匹配的元字符
字符 | 功能 |
. | 匹配任意1个字符 |
[] | |
\d | 匹配0-9数字 |
\D | 匹配非数字 |
\s | 匹配空白(空格,tab) |
\S | 匹配非空白 |
\w | |
\W | 匹配非\W的字符 |
数量元字符
字符 | 功能 |
* | |
? | |
+ |
|
{m} | |
{m,} | |
{m,n} | |
I |
边界字符
字符 | 功能 |
^ | 行首 |
$ | 行尾 |
\b | 匹配单词的开始或结束,分解符为空格 |
\B | 匹配非单词边界 |
分组元字符
字符 | 功能 |
I | 匹配左右两边任意一个表达式 |
(ab) | 将括号中的字符作为一个分组 |
4.9.3.实例
^\b{8}$
[aeiou]
(^\d{17})(\d|X|x)$
\w{5,11}@(163|126|qq.com)\.(com|cn)
r'\w{5,11}@(163|126|qq.com).(com|cn)'
r'\w+\.py\b'
需要加载:import re
math() 方法
格式:re.math(pattern,string,[flags])
作用:从字符串起始位置起开始查找匹配,成功返回math对象,否则返回None。只能匹配一个
pattern:使用正则表达式表示的模式字符串
string:要匹配的字符串
flags:可省略,表示标准位,控制匹配方法,如:是否区分大小写子母等
标准 | 作用 |
A | ASCII码匹配 |
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])