python字符串

2023-09-15 21:46:44

字符串

  • 字符串是一个不可变的字符序列。

1.字符串的创建

# 单引号,双引号,三引号都可以
a = 'python'
b = "python"
c = '''pyhton'''

2.字符串的常用操作

2.1查询操作
方法作用
index()查找子窜substr第一次出现的位置,如果查找的字串不存在时,则抛出ValueError
rindex()查找字串substr最后一次出现的位置,如果查找的字串不存在时,则抛出ValueError
find()查找子窜substr第一次出现的位置,如果查找的子窜不存在,则返回-1
rfind()查找字串substr最后一次出现的位置,如果查找的字串不存在时,则返回-1
s = 'hello,hello'
print(s.index('lo'))  # 3
print(s.find('lo'))  # 3
print(s.rindex('lo'))  # 9
print(s.rfind('lo'))  # 9

#print(s.index('k'))  # substring not found
print(s.find('k'))  # -1
#print(s.rindex('k'))  # substring not found
print(s.rfind('k'))  # -1
2.2大小写转换操作
方法作用
upper()把字符串中所有字符都转换成大写字母
lower()把字符串中所有字符都转换成小写字母
swapcase()把字符串中所有大写字母都转换成小写字母,把所有小写字母都转换成大写字母
capitalize()把第一个字符转换为大写,把其余字符转换为小写
title()把每个单词的第一个字符转换为大写,把每个单词的剩余字符转换为小写
s = 'hello,python'
a = s.upper()
print(s.upper(), id(s.upper()))  # HELLO,PYTHON 2697940633264 转成大写之后,会产生一个新的字符串对象
print(s.lower(), id(s.lower()))  # hello,python 2697943577968 转成小写之后,会产生一个新的字符串对象
print(s, id(s))  # hello,python 2697940633008

s2 = 'hello,Python'
print(s2.swapcase())  # HELLO,pYTHON

print(s2.capitalize())  # Hello,python

print(s2.title())  # Hello,Python
2.3 内容对其操作
方法作用
center()居中对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格;如果设置宽度小于实际宽度,则返回原字符串
ljust()左对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格;如果设置宽度小于实际宽度,则返回原字符串
rjust()右对齐,第1个参数指定宽度,第2个参数指定填充符,第2个参数是可选的,默认是空格;如果设置宽度小于实际宽度,则返回原字符串
zfill()右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度;如果指定的宽度小于等于字符串的长度,则返回字符串本身
s = 'hello,Python'

print(s.center(20, '*'))  # ****hello,Python****

print(s.ljust(20, '*'))  # hello,Python********
print(s.ljust(10))  # hello,Python(原字符串)
print(s.ljust(20))  #hello,Python        (中间实际是空格)

print(s.rjust(20, '*'))  # ********hello,Python
print(s.rjust(20))  #         hello,Python
print(s.rjust(10))  # hello,Python(原字符串)

print(s.zfill(20))  # 00000000hello,Python
print(s.zfill(10))  # hello,Python(原字符串)
print('-666'.zfill(8))  # -0000666
2.4劈分操作
方法作用
split()从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表
通过参数sep指定劈分字符串时的劈分符
通过参数maxsplit指定劈分字符串的最大劈分次数,在经过最大次劈分之后,剩余的子串会单独作为一部分
rsplit()从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表
通过参数sep指定劈分字符串时的劈分符
通过参数maxsplit指定劈分字符串的最大劈分次数,在经过最大次劈分之后,剩余的子串会单独作为一部分
s = 'hello world python'
lst = s.split();
print(lst)  # ['hello', 'world', 'python']

s1 = 'hello|world|python'
print(s1.split(sep='|'))  # ['hello', 'world', 'python']
print(s1.split(sep='|', maxsplit=1))  # ['hello', 'world|python']

print(s1.rsplit('|'));  # ['hello', 'world', 'python']
print(s1.rsplit(sep='|', maxsplit=1))  # ['hello|world', 'python']
2.5判断操作
方法作用
isidentifier()判定指定的字符串是不是合法的标识符
isspace()判断指定的字符串是否全部由空白字符串组成(回车、换行、水平制表符)
isalpha()判断指定的字符串是否全部由字母组成
isdecimal()判断指定的字符串是否全部由十进制的数字组成
isnumeric()判断指定的字符串是否全部由数字组成
isalnum()判断指定的字符串是否全部由字母和数字组成
print('hello,python'.isidentifier())  # False
print('hello'.isidentifier())  # True
print('美羊羊'.isidentifier())  # True
print('美羊羊_123'.isidentifier())  # True

print('\n'.isspace())  # True
print('\t'.isspace())  # True

print('abc'.isalpha())  # True
print('张三'.isalpha())  # True
print('张三1'.isalpha())  # False

print('123'.isdecimal())  # True
print('123四'.isdecimal())  # False
print('Ⅱ Ⅱ'.isdecimal())  # False

print('123'.isnumeric())  # True
print('123四'.isnumeric())  # True
print('ⅡⅡ'.isnumeric())  # True

print('abc1'.isalnum())  # True
print('张三123'.isalnum())  # True
print('abc!'.isalnum())  # False
2.6替换与合并操作
方法作用
replace()第一个参数指定被替换的子串,第2个参数指定替换字串的字符串,第3个参数指定替换次数
该方法返回替换后得到的字符串,替换前的字符串不发生变化
join()将列表或元组中的字符串合并成一个字符串
s = 'hello,python'
print(s.replace('python', 'Java'))  # hello,Java

s1 = 'hello,python,python,python'
print(s1.replace('python','Java',2))  # hello,Java,Java,python

lst = ['hello', 'Java', 'python']
print('|'.join(lst))  # hello|Java|python
print(''.join(lst))  # helloJavapython

t = ('hello', 'Java', 'python')
print(''.join(t))  # helloJavapython

print('*'.join('python'))  # p*y*t*h*o*n
2.7比较操作
运算符:>,>=,<,<=,==,!=
比较规则: 首先比较两个字符串中的第一个字符,如果相等,则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串的所有后续字符不再被比较。
比较原理: 两个字符进行比较时,比较的是齐ordinal value(原始值),调用内置函数ord()可以得到指定字符的ordinal value。与内置函数ord()对应的是内置函数chr(),调用内置函数chr()时指定ordinal value可以得到其对应的字符。
print('apple' > 'app')  # True
print('apple' > 'banana')  # False

print(ord('a'), ord('b'))  # 97 98
print(ord('王'))  # 29579

print(chr(97), chr(98))  #
print(chr(29579))  # 王

'''== 与 is 的区别
  == 比较的是value
  is  比较的是id是否相等'''
a = b = 'python'
c = 'python'
print(a == b)  # True
print(b == c)  # True

print(a is b)  # True
print(a is c)  # True(驻留机制)
2.8切片操作
s [start : end : step]
第一个元素表示切片的起始位置,第二个元素表示切片的结束位置(不包括该下标),step代表切片的步长
未写start,默认起始位置为第一个;未写end,默认起始位置为最后一个;未写step,默认步长为1
s = 'hello,python'
s1 = s[:5]  # 没有指定起始位置,所以从0开始切
s2 = s[6:]  # 没有指定结束位置,所以切到字符串的最后一个元素
s3 = '!'
newstr = s1 + s3 + s2
print(s, id(s))  # hello,python 1937847354864
print(s1, id(s1))  # hello 1636502734576
print(s2, id(s2))  # python 1636505679024
print(newstr, id(newstr))  # hello!python 1636505681136

print(s[1:5:1])  # ello(从1开始截到5(不包含5),步长为1)
print(s[::2])  # hlopto(默认从0开始,截到字符串的最后一个元素,步长为2)
print(s[::-1])  # nohtyp,olleh(默认从字符串的最后一个元素开始,到字符串的第一个元素结束,步长为1)
print(s[-6::1])  # python
2.9格式化字符串操作
%作占位符%s:字符串;%i或%d:整数;%f:浮点数(见方法1)
{}作占位符‘{0}{1}.format()’(见方法2)
{}作占位符f-string(见方法3)
name = '张三'
age = 20
# 方法1
print('我叫%s,今年%d岁' % (name, age))  # 我叫张三,今年20岁
# 方法2
print('我叫{0},今年{1}岁'.format(name, age))  # 我叫张三,今年20岁
# 方法3 f-string
print(f'我叫{name},今年{age}岁')  # 我叫张三,今年20岁

print('%10d' % 99) #         99:10表示的是宽度
print('%.3f' % 3.1415926)  # 3.142:.3表示的是小数点后三位
#同时表示宽度和精度
print('%10.3f' % 3.1415926)  #      3.142:一共总宽度为10,小数点后3位

print('{0:.3}'.format(3.1415926))  # 3.14:.3表示的是一共是3位数
print('{0:.3f}'.format(3.1415926))  # 3.142:.3表示3位小数
print('{0:10.3f}'.format(3.1415926))  #      3.142:一共10位,3位小数

3.字符串的编码转换

编码与解码

  • 编码:将字符串转换为二进制数据(bytes)
  • 解码:将bytes类型的数据转换为字符串类型
s = "一日看尽长安花"
# 编码
# 在GBK这种编码中,一个中文占两个字节
print(s.encode(encoding='GBK'))  # b'\xd2\xbb\xc8\xd5\xbf\xb4\xbe\xa1\xb3\xa4\xb0\xb2\xbb\xa8'
# 在UTF-8这种编码中,一个中文占三个字节
print(s.encode(encoding='UTF-8'))  # b'\xe4\xb8\x80\xe6\x97\xa5\xe7\x9c\x8b\xe5\xb0\xbd\xe9\x95\xbf\xe5\xae\x89\xe8\x8a\xb1'

#解码
#byte代表就是一个二进制数据(字节类型的数据)
byte = s.encode(encoding='GBK')  # 编码
print(byte.decode(encoding='GBK'))  # 解码:一日看尽长安花

byte = s.encode(encoding='UTF-8')
print(byte.decode('UTF-8'))  # 一日看尽长安花
更多推荐

【C++】STL之list深度剖析及模拟实现

前言list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前

【数据结构】【项目】BitMap?40亿电话号码如何快速去重?

目录前言实现完整代码参考资料前言40亿电话号码如何快速去重?我们往往会想到bitmap数据结构中的Bitmap是一种位图索引非常高效的数据结构,用于存储处理大规模数据的位信息,其中每个位对应于一个元素,如果位为1,则表示该元素存在于集合中,否则表示不存在。如果要表示一个包含10个元素的数据集,可以创建一个包含10位的位

卡尔曼滤波(Kalman Filter)C#测试

一、操作过程刚学了一下卡尔曼滤波,具体原理还没细看,大致过程如下分为两步,第一步Predict,以下两个公式第二步Correct,以下三个公式公式看起来很复杂,其中是我们要处理的数据,是滤波之后的值,其他一些有些是需要给定的,有些是中间值。从t=1时刻开始,通过第一步,计算得到的值,给到第二步Correct里,第二步的

java入坑之Jsoup(待补充)

一、快速入门1.1配置<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.16.1</version></dependency>1.2解析xmlJsoup:jsoup是一款Java的HTML解析器,可直接解析某

C++宏的用法

​1.命名空间:这样可以把不同功能段的代码进一步封装起来#defineBEGINS(x)namesapcex{#defineENDS(x)}BEGINS(TEST1)voidfunc(){printf("helloworld");}intmain(){func();return0;}ENDS(TEST1)BEGINS(

19.组合模式(Composite)

意图:将对象组成树状结构以表示“部分-整体”的层次结构,使得Client对单个对象和组合对象的使用具有一致性。上下文:在树型结构的问题中,Client必须以不同的方式处理单个对象和组合对象。能否提供一种封装,统一简单元素和复杂元素的概念,让对象容器自己来实现自身的复杂结构,让Client可以像处理简单元素一样来处理复杂

leetcode 332. Reconstruct Itinerary(重构行程)

有一些票tickets,tickets[i]=[from,to],每个出发到达城市名字都是3个大写英文字母,同一个出发城市时,优先去字母顺序较小的到达城市。必须先从“JFK”出发。每个ticket必须用且只用一次,所有ticket一定会形成至少一个有效的行程(出发至到达的一路上遍历所有城市)按顺序记录行程上的城市并返回

应用商店优化之关键词优化指南2

在寻找良好关键词的方法中,分析竞争对手是寻找关键词的最佳且最可靠的方法。查找排名最高的关键词或者是获得最多下载量的关键词,这样就可以准确的瞄准那些带来最大价值的关键词,从而带来更好的优化效果。1、选择正确的关键词。搜索分数用来衡量关键词流行度的分数。该分数是一个从1到100的数字,分数越高,对该关键词进行的搜索就越多。

MySQL索引,Explain,事务,锁与MVCC

MySQL的索引为什么不能为二叉树假如为二叉树,索引值插入顺序为1,2,3,4,5,6,那么形成的索引结构如图:搜索效率并不高。此时可以优化为红黑树(二叉平衡树),如图:但是红黑树也有问题,就是树的高度,如果数据过多,红黑树过高也会影响效率。为了控制高度,可以给每一个节点分配大一点的空间,例如上面的0002节点可以存储

css自学框架之图片懒加载

首先解释一下什么叫图片懒加载。图片懒加载是一种在页面加载时,延迟加载图片资源的技术,也就是说图片资源在需要的时候才会加载,就是在屏幕显示范围内加载图片,屏幕显示范围外图片不加载。一、关键函数用到的关键函数:globalThis.IntersectionObserver。varobserver=newIntersecti

亚马逊应该怎么快速提升排名,获取review?

跨境电商做久了,卖家都会陷入一个困境,到底是该坚持慢慢做好,还是要测评?现在跨境电商平台人人都在刷,不刷单想成功真的很难,不是没可能,但是选品要非常好,而且你的listing也要做好,推广要求又高你看那些大卖的评论长篇大论,图片视频样样都有,说是国外人写的,我估计都没人信,只是你还不会测评而已,会的话你就不会惊讶了但老

热文推荐