python全栈_006_Python3基本数据类型--字符串
把字符连成串,在Python中使用', ",''',"""引起来的内容被称为字符串。
在Python中字符串是一种不可变数据类型,即不可修改变量对应内存中的内容,对字符串变量重新赋不同的值会重新创建对象,分配内存:
s = 'abcd' #s[0] = 'A' # 不能执行这样的操作,字符串为不可变数据类型 print(s[0]) # 只可以通过下标访问,不能通过下标修改其值 print(s,id(s)) s = 'abce' # 重新赋值,重新创建了一个对象,分配了新的内存 print(s,id(s)) s = s + 'a' # 字符串的连接,也会重新创建对象 print(s,id(s)) s = s * 2 # 重复字符串,也会重新创建对象 print(s,id(s))
1 :切片和索引
1.1: 索引
索引就是下标. 切记, 下标从0开始:
# 01234 s = 'Hello' print(s[0]) print(s[1]) print(s[2]) print(s[3]) print(s[4]) #print(s[5]) # 没有5, 越界了了. 会报错 string index out of range print(s[-1]) # -1 表示倒数第一个。 print(s[-2]) # -2 表示倒数第二个。
1.2:切片:
我们可以使用下标来截取部分字符串的内容
语法: str[start: end]
规则: 顾头不顾尾, 从start开始截取. 截取到end位置. 但不包括end (start<= x < end)
s = '中华人民共和国' print(s[0:3]) # 输出 中华人 print(s[2:6]) # 输出 人民共和 print(s[2:7]) # 输出 人民共和国 print(s[2:20]) # 输出 人民共和国 ,如果右边已经超过了最大值,相当于获取到最后; print(s[2:]) # 输出 人民共和国 ,如果想获取到最后,那么最后一个值可以不给。 print(s[3:2]) # 取不到任何结果,默认的方向是从左往右切,从3向右数,你怎么数也数不到2 print(s[-1:-4]) # 取不到任何结果,默认的方向是从左往右切,从-1向右数,你怎么数也数不到-5 print(s[-4:-1]) # 输出 民共和 ,顾头不顾尾,取不到最后一个 print(s[-4:]) # 输出 民共和国 ,什么不写就是最后一个了 print(s[1:]) # 输出"华人民共和国" ,去掉第一个字符 print(s[:-1]) # 输出"中华人民共和" ,取到倒数第一个,即去掉倒数一个字符 print(s[:]) # 原样输出,输出 中华人民共和国
跳着截取
步长: 如果是整数, 则从左往右取. 如果是负数. 则从右往左取. 默认是1
切片语法: start
str[start:end:step]
start: 起始位置
end: 结束位置
step:步长
''' str[start:end:step] start: 起始位置 end: 结束位置 step:步长,默认为1 ,(不能为0) 执行过程(个人理解,未验证): cur = start if step > 0 while cur < end: 取 s[cur] cur += step elif while cur > end: 取 s[cur] cur += step ''' s = '坚持走符合国情的人权发展道路促进人的全面发展' print(s[1:7:2]) # 输出 第1 3 5 位的,输出 "持符国" print(s[:7:2]) # 输出 第0 2 4 6 位的,输出 "坚走合情" print(s[6::2]) # 从6开始到最后,每两个取一个;输出"情人发道促人全发" print(s[-7::2]) # 从-7开始取到最后,每两个取一个;输出"进的面展" print(s[-1:-7]) # -1:-7 什么都没有,因为从左到右获取(-1,0,1,2,不可能到达-7;) print(s[-1:-7:-1]) # -1 -2 -3 -4 -5 -6 ,输出 "展发面全的人" print(s[5:2]) # 什么都没有, print(s[5:2:-1]) # 5 4 3,输出 "国合符" s = 'hello' print(s[2:]) # step > 0,到最末尾,输出"llo" print(s[2::-1]) # step < 0,到最开始,输出"leh" print(s[::]) # 输出 "hello" print(s[::-1]) # 输出 "olleh"
2:字符串的相关操作方法
字符串是不可变数据类型, 所以任何操作对原字符串是不会有任何影响的;所有操作都是产生新字符串返回;
2.1:大小写转来转去
#1:首字母大写 s = 'all for One, one For all.' print("1:",s) s.capitalize() #首字母大写 print("2:",s) # 输出不会有任何变化,因为Python中字符串为不可变类型,需要把转换结果重新赋值给字符串变量 s1 = s.capitalize() # 重新创建了一个对象, print("3:",s1) #2:大小写的转换 ### 全部转换为小写字母 ret = s.lower() print("4:",ret) ### 全部转换为大写字母 ret = s.upper() print("5:",ret) # 应用,检验用户输入的检验 ''' varify_code = "aDdwS" user_varify_code = input("请输入验证码:") if varify_code.upper() == user_varify_code.upper(): print("验证成功") else: print("验证失败") ''' ### 大小写互相转换 ret = s.swapcase() print("6:",ret) ### 转换为小写字符, ret = s.casefold() # lower() 对某些字符支持不够好;casefold() 支持所有字符 print("7:",ret) #每个被特殊字符隔开的字母首字母大写 s2 = "the longest day has*an end." ret = s2.title() print("8:",ret) #中文也是特殊字符 s2 = "the中国longest day" ret = s2.title() print("9:",ret)
2.2:切来切去
s = '刘德华' ret = s.center(10,"*") # 拉长成10, 把原字符串放中间.其余位置补* print("1:",ret) s = 'all for One, one \tFor all.' print("2:",s) print("2:",s.expandtabs()) # 可以改变\t的长度,默认长度更改为8 #去空格 s = ' all for One, one For all ' ret = s.strip() print("4:",ret) s = ' all for One, one For all ' ret = s.lstrip() # 去掉左边空格 print("5:",ret) s = ' all for One, one For all ' ret = s.rstrip() # 去掉右边空格 print("6:",ret) ''' #应用:模拟用户登录. 忽略用户输入的空格 username = input("请输入用户名:").strip() password = input("请输入密码:").strip() if username == 'admin' and password == 'admin123': print("登录成功") else: print("登录失败") ''' #strip()也可以去掉指定的元素 s = "abcdadalacbabc;askda;abc" print("7:",s.strip("abc")) print("8:",s.lstrip("abc")) print("9:",s.rstrip("abc")) #字符串替换 s = 'all for One, one For all' ret = s.replace('al','hello') # 字符串为不可变数据类型,所有操作都是产生新字符串返回 print("10:",ret) ret = s.replace('o','uuu',2) # 替换2个 print("11:",ret) # 字符切割 s = 'all for One, one For all' lst = s.split(' ') print(lst) lst = s.split(',') print(lst) lst = s.split('oo') print(lst) lst = s.split('all') #['', ' for One, one For ', ''] 如果切割符在左右两端. 那么一定会出现空字符串 print(lst)
2.3:格式化输出
#格式化输出 s = "我叫%s,今年%d岁了,我喜欢%s"%('joshou',19,'刘德华') print(s) s1 = "我叫{},今年{}岁了,我喜欢{}".format('joshou',19,'刘德华') # 指定格式化 print(s1) s2 = "我叫{0},今年{1}岁了,我喜欢{2}".format('joshou',19,'刘德华') # 指定位置 print(s2) s2 = "我叫{1},今年{2}岁了,我喜欢{0} 我喜欢{0}".format('刘德华','joshou',19) # 指定位置 print(s2) s2 = "我叫{name},今年{age}岁了,我喜欢{singer} 我喜欢{singer}".format(singer = '刘德华',name = 'joshou',age = 19) # 指定关键字 print(s2)
2.4:查找
# 是否以xxxx开头 s = "我叫iSwqr,haha,我喜欢python, java, cpp等编程语言." ret = s.startswith("iSwqr") # 判断是否以"iSwqr"开头 print(ret) # False ret = s.startswith("我叫iSwqr") # 判断是否以"我叫iSwqr"开头 print(ret) # True #是否以xxxx结尾 ret = s.endswith("语言") # 判断是否以"语言"结尾 print(ret) # False ret = s.endswith("语言.") # 判断是否以"语言."结尾 print(ret) # True # 出现的次数 ret = s.count('a') print(ret) # 4 ret = s.count('haha') print(ret) # 1 # 查找 (没有找到返回-1,找到返回首次出现的位置) ret = s.find('iSwqr') # 查找'iSwqr'首次出现的位置 print(ret) # 2 ret = s.find('ha') # 查找'ha'首次出现的位置 print(ret) # 8 ret = s.find('hello') # 查找'hello'首次出现的位置,如果没有找到返回-1 print(ret) # -1 ret = s.find('ha',1,7) # 切片找, print(ret) # -1 ret = s.index('iSwqr') # 求索引位置。注意:如果找不到索引,程序会报错 print(ret) # 2
2.5:条件判断
s1 = '123.45' s2 = 'abcd' s3 = '_abcd!@#' s4 = 'abcd1234' s5 = '1234' #是否由字母和数字组成(全字母,全数字,或者字母数字的组合) print('=1:===isalnum()===') print(s1.isalnum()) # False print(s2.isalnum()) # True print(s3.isalnum()) # False print(s4.isalnum()) # True print(s5.isalnum()) # True #是否由字母组成 print('=2:===isalpha()===') print(s1.isalpha()) # False print(s2.isalpha()) # True print(s3.isalpha()) # False print(s4.isalpha()) # False print(s5.isalpha()) # False #是否由数字组成,不包括小数点: print('=3:===isdigit()===') print(s1.isdigit()) # False print(s2.isdigit()) # False print(s3.isdigit()) # False print(s4.isdigit()) # False print(s5.isdigit()) # True print('=4:===isdecimal()===') s1 = '1253.16' s5 = '1253' print(s1.isdecimal()) # False print(s5.isdecimal()) # True print('=5:===isnumeric()===') s1 = '1253.16' s5 = '1253' print(s1.isnumeric()) print(s5.isnumeric()) s6= '二十' print(s6.isnumeric()) # True,isnumeric()能识别中文的数值
2.6:求字符串的长度
s = '算你狠,haha' ret = len(s) # len = 8 print(ret,s) s1 = s.encode('utf-8') ret = len(s1) # 3 * 3 + 5 print(ret,s1) # len = 14 s2 = s.encode('gbk') ret = len(s2) # 2*3 + 5 print(ret,s2) # len = 11
2.7:迭代
我们可以使用for循环来便利(获取)字符串中的每一个字符
语法:
for 变量 in 可迭代对象:
pass
可迭代对象: 可以一个一个往外取值的对象
s = '算你狠,haha' for c in s: print(c,end = ' ') print('') index = 0 while index < len(s): print(s[index],end= ' ') index += 1 ''' in有两种用法: 1. 在for中:是把每一个元素获取到,然后赋值给前面的变量。 2. 不在for中: 判断xxx是否出现在str中. ''' print('') print('xsd' in s) # False print('haha' in s) # True
标签:
Python
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· 软件产品开发中常见的10个问题及处理方法
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· MQ 如何保证数据一致性?
· 《HelloGitHub》第 108 期