Python---字符串

字符串

eg:判断一个整数是否是回文数(从前往后看和从后往前看都是一个数)
input()获取的数据直接就是一个字符串
字符串过跟到底是一个像元组那样不可变的序列,对于一个序列,可以使用切片的方式将它反转

x = "12321"
"是回文数" if x == x[::-1] else "不是回文数"   #'是回文数'
x = "12345"
"是回文数" if x == x[::-1] else "不是回文数"   #'不是回文数'

字符串的众多小伙伴们

大小写字母换来换去

在这里插入图片描述

capitalize()

将字符串首字母变成大写,其他字母变成小写
返回的并不是源字符串—字符串是不可变的对象,所以它只是按照这个规则来生成一个新的字符串

x = "I love FishC"
x.capitalize()  #'I love fishc'
x   #  'I love FishC'
casefold()

返回一个所有字母都是小写的新字符串—除了可以处理英语之外,还可以处理更多其它语言的字符,比如德语

x = "I love FishC"
x.casefold()  #'i love fishc'
title()

会将字符串中每个单词的首字母都变成大写,该单词的所有其他字母都变成小写

x = "I love FishC"
x.title()  #'I Love Fishc'
swapcase()

将字符串中的所有字母大小写翻转

upper()

将所有的字母都变成大写

lower()

将所有字母变成小写—只能处理英文字母

左中右对齐

在这里插入图片描述
width—用来指定整个字符串的宽度,如果指定的宽度小于或者等于源字符串,直接源字符输出
fillchar—默认值是空格,相当于如果不专门设置,就默认用空格来填充

center(width, fillchar=’ ')
x = "有内鬼,停止交易!"
x.center(5)  #'有内鬼,停止交易!'
x.center(15)  #'   有内鬼,停止交易!   '
x.center(15,"淦")   #'淦淦淦有内鬼,停止交易!淦淦淦'
ljust(width, fillchar=’ ')

实现的是一个左对齐

x = "有内鬼,停止交易!"
x.ljust(15)  #'有内鬼,停止交易!      '
rjust(width, fillchar=’ ')

实现一个右对齐

x = "有内鬼,停止交易!"
x.rjust(15)  #'      有内鬼,停止交易!'
zfill(width)

用0去填充左侧
在做数据报表的时候比较实用,也能够处理负数,不是一味的在前面填充0而已,它会把负号给挪到左边去

x = "有内鬼,停止交易!"
x.zfill(15)  #'000000有内鬼,停止交易!'

"520".zfill(5)  #'00520'
"-520".zfill(5)  #'-0520'
查找

在这里插入图片描述

count(sub[, start[, end]])

用于查找sub参数指定的子字符串在字符串中出现的次数
start、end用来指定查找的起始和结束位置

x = "上海自来水来自海上"
x.count("海")  #2
x.count("海", 0, 5)  #1
find(sub[, start[, end]])

用于定位sub参数指定的子字符串在字符串中的索引下标值,从左往右找,下标的索引是从0开始的

x = "上海自来水来自海上"
x.find("海")  #1
rfind(sub[, start[, end]])

用于定位sub参数指定的子字符串在字符串中的索引下标值,从右往左找

x = "上海自来水来自海上"
x.rfind("海")  #7
index(sub[, start[, end]])

跟find两个方法类似,区别是如果定位不到子字符串那么处理方式是不一样的

rindex(sub[, start[, end]])
x = "上海自来水来自海上"
x.find("龟") #-1
x.index("龟")  #直接抛出异常ValueError: substring not found
替换

在这里插入图片描述

expandtabs([tabsize=8])

使用空格来替换制表符,并且返回一个新的字符串
进行缩进时,tab和空格最好不要混合使用
expandtabs—可以简单的将字符串中的tab全部替换为空格

code = """
	print("I love FishC")
    print("I love my wife")"""
new_code = code.expandtabs(4)  #参数是指定一个tab等于多少个空格
print(new_code)  #"""
    print("I love FishC")
    print("I love my wife")""" 上下两行代码,它们的缩进都用四个空格来表示了
replace(old, new, count=-1)

返回一个将所有old的参数指定的子字符串替换为new参数指定的新字符串
count参数指定的是替换的次数,默认值这个count是-1,不设置这个参数的话,相当于替换全部

"在吗!我在你家楼下,快点下来!!".replace("在吗","想你") #'想你!我在你家楼下,快点下来!!'
translate(table)

返回一个根据table参数转换后的新字符串
table在这里是表格的意思,用于指定一个转换规则的表格
str.maketrans(x[, y[, z]])----用这个方法来获取这个table表格,属于字符串的一个静态方法

table = str.maketrans("ABCDEFG", "1234567")
"I love FishC".translate(table)  #'I love 6ish3'----'F'、'C'替换成了6、3
"I love FishC".translate(str.maketrans("ABCDEFG", "1234567"))  #'I love 6ish3'-------先调用str.maketrans来获取一个转换规则的表格,再将该表格作为translate方法的参数进行调用

str.maketrans方法还支持第三个参数,表示将指定的字符串给忽略

"I love FishC".translate(str.maketrans("ABCDEFG", "1234567", "love"))  #'I  6ish3'-----先调用str.maketrans来获取一个转换规则的表格,再将该表格作为translate方法的参数进行调用
判断

在这里插入图片描述
都是对应字符串的各种情况下的判断和检测,返回的都是一个布尔类型的值,True或者False

startswith(prefix[, start[, end]])

用于判断它这个参数指定的子字符串是否出现在字符串的起始位置

x = "我爱Python"
x.startswith("我")   #True
x.startswith("你")   #False  
endswith(suffix[, start[, end]])

用于判断这个参数指定的子字符串是否出现在字符串的结束位置

x = "我爱Python"
x.endswith("Python")   #True
x.endswith("Py")    #False  

“[]”代表是可选参数,相当于这个函数或者方法的一个高级定制版本,如果给它赋值,它会有新的特性出现
上述两个方法中start、end是可选参数

x = "我爱Python"
x.startswith("我", 1)    #False  ----表示索引值为[1]这个元素开始匹配的,“我爱Python”变成了“爱Python”,从“我爱Python”中找“我”这个子字符串
x.startswith("爱", 1)    #True
x.endswith("Py", 0, 4)   #True---搜索的位置从下标为[0]的那个元素开始,到下标为[4]的那个元素结束的,包头不包尾

这两个函数,他们的参数支持以元组的形式传入多个待匹配的字符串的

x = "她爱Python"
if x.startswith(("你", "我", "她")):  #-----这里注意有两个括号
	print("总有人喜欢Python")   #总有人喜欢Python
istitle()

判断一个字符串中所有单词是否都是以大写字母开头,其余字母均为小写

x = "I love Python"
x.istitle()  #False
isupper()

判断一个字符串中是否所有的字母都是大写字母

x = "I love Python"
x.isupper()  #False
x.upper().isupper() #True---先将全体成员变为大写的新字符串,再对新字符串进行判断

在一个语句中连续调用多个方法,Python是从左往右依次进行调用的

islower()

判断一个字符串中是否所有的字母都是小写字母

isalpha()

判断一个字符串中是否只是有字母构成

x = "I love Python"
x.isalpha()  #False---空格不是字母
"IlovePython".isalpha() #True
isspace()

判断是否为一个空白字符串
并不是说只有空格才是空白字符串,tab、转义字符也是

"   	\n".isspace()   #True
isprintable()

判断一个字符串中是否所有字符都是可以打印的
转义字符并不是一个可打印字符

x = "I love Python"
x.isprintable()  #True
"I love Python\n".isprintable()  #False
isdecimal()
isdigit()
isnumeric()

都是用来判断数字的

x = "12345"
x.isdecimal() #True
x.isdigit() #True
x.isnumeric() #True
x = "2²"
x.isdecimal()  #False
x.isdigit()   #True
x.isnumeric()  #True
x = "Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ"
x.isdecimal()  #False
x.isdigit()   #False
x.isnumeric()  #True
x = "一 二 三 四 五"
x.isdecimal()  #False
x.isdigit()   #False
x.isnumeric()  #True

他们都有自己的尺度和范围,并不是范围越大就越好

isalnum()

只要isalpha()、isdecimal()、isdigit()、isnumeric()中任意一个方法返回True,那么结果都是True,它是一个集大成者

isidentifier()

用于判断这个字符串是否是一个合法的python标识符
变量名必须是一个合法的python标识符

"I am a good guy".isidentifier() #False-----有空格
"I_am_a_good_guy".isidentifier()  #True
"520FishC".isidentifier() #False

如果要判断一个字符串是否为python的保留标识符(if、for、while、…等关键字),可以使用keyword模板的iskeyword函数,使用一个模块要先导入

import keyword
keyword.iskeyword("if") #True---调用keyword模板的iskeyword函数
截取

在这里插入图片描述

lstrip(chars=None)

不想看到字符串的左侧存在空白

rstrip(chars=None)

去除右侧空白

strip(chars=None)

左右不要留白

"    左侧不要留白".lstrip()  #'左侧不要留白'
"右侧不要留白   ".rstrip()  #'右侧不要留白'
"   左右侧不要留白   ".strip()  #'左右侧不要留白'

chars默认情况下被设置为None,None在python中表示啥都没有,意思是去除的是空白,这个参数也可以给它传入一个字符串

" www.ilovefishc.com".lstrip("wcom.")  #'ilovefishc.com'
"www.ilovefishc.com".rstrip("wcom.")  #'www.ilovefish'
"www.ilovefishc.com".strip("wcom.")  #'ilovefish'

这里我们传入的虽然是一串字符,但是它是按照单个字符为单位进行匹配去剔除的

下面两个方法允许指定将要删除的前缀或者后缀

removeprefix(prefix)

指定删除前缀

removesuffix(suffix)

注定删除后缀

" www.ilovefishc.com".removeprefix("www.")  #'ilovefishc.com'
"www.ilovefishc.com".removesuffix(".com")  #'www.ilovefishc'
拆分&拼接

拆分字符串
下面两个方法:
将字符串以参数指定的分割符为依据进行切割,并且将切割后的结果返回一个三元组(三个元素的元组)—(‘分割符左侧内容’, ‘分割符’, ‘分割符右侧内容’)

partition(sep)

从左到右去找参数指定的这个分割符

rpartition(sep)

从右到左去找参数指定的这个分割符

" www.ilovefishc.com".partition(".")  #(' www', '.', 'ilovefishc.com')
"ilovefishc.com/python".rpartition("/")   #('ilovefishc.com', '/', 'python')
split(sep=None, maxsplit=-1)

具有两个带有默认值的参数,如果不指定任何参数值,他就按照自己的想法来,默认情况下切分空格,将结果打包成列表返回

"苟日新 日日新 又日新".split()  #['苟日新', '日日新', '又日新']
"苟日新,日日新,又日新".split(',')  #['苟日新', '日日新', '又日新']

maxsplit可以灵活的指定想要分割的次数,默认值是-1,表示找到分割符就一刀切下去

"苟日新,日日新,又日新".split(',', 1)  #['苟日新', '日日新,又日新']
"苟日新,日日新,又日新".rsplit(',', 1)  #['苟日新,日日新', '又日新']
rsplit(sep=None, maxsplit=-1)

从右往左去找

"苟日新,日日新,又日新".rsplit(',')  #['苟日新', '日日新', '又日新']
"苟日新\n日日新\n又日新".split('\n')  #['苟日新', '日日新', '又日新']
"苟日新\r日日新\r又日新".split('\r')  #['苟日新', '日日新', '又日新']

不同的系统表示换行的形式不一样

splitlines(keepends=False)

将字符串按行进行分割,将结果以列表的形式返回
keepends指定这个结果是否要包含这个换行符,默认不包含

"苟日新\n日日新\n又日新".splitlines()  #['苟日新', '日日新', '又日新']
"苟日新\r日日新\r又日新".splitlines()  #['苟日新', '日日新', '又日新']
"苟日新\r日日新\r\n又日新".splitlines()  #['苟日新', '日日新', '又日新']

"苟日新\r日日新\r\n又日新".splitlines(True)  #['苟日新\r', '日日新\r\n', '又日新']
join(iterable)

字符串拼接
前面的字符串作为分割符来使用
iterable是多个可迭代对象,用一个列表或者元组把他们包裹起来

".".join(["www", "ilovefishc", "com"])  #'www.ilovefishc.com'
".".join(("w", "ilovefishc", "com"))  #'w.ilovefishc.com'
s = "FishC"
s += s
s  #'FishCFishC'
"".join(("FishC", "FishC"))  #'FishCFishC'

当需要拼接的数量很大时,join的效率比“+”高

格式化字符串
year = 2010
"工作室成立于 year 年" #'工作室成立于 year 年'
"工作室成立于 {} 年".format(year)  #'工作室成立于 2010 年'
format

使用“{}”来表示替换字段,真正的内容放在format方法的参数中

"1+2={},2的平方是{}".format(1+2, 2*2)  #'1+2=3,2的平方是4'

“{}”里面也可以填上数字,表示参数的位置,索引值

"{}看到{}就很激动".format("我", "帅哥")  #'我看到帅哥就很激动'
"{1}看到{0}就很激动".format("我", "帅哥")  #'帅哥看到我就很激动'

参数中的字符串将会被当作元组的元素来对待,下标索引值从0开始

"{0}{0}{1}{1}".format("是", "非")  #'是是非非'

还可以通过关键字进行索引,关键字参数就不需要注意顺序了

"我叫{name},我爱{fav}".format(name="巴拉", fav="python") #'我叫巴拉,我爱python'

位置索引和关键字索引可以进行混合使用

"我叫{name},我爱{0},喜爱{0}的人,运气都不会太差".format("python", name="巴拉") #'我叫巴拉,我爱python,喜爱python的人,运气都不会太差'

单纯输出“{}”

"{}, {}, {}".format(1, "{}", 2)  #'1, {}, 2'
"{}, {{}}, {}".format(1, 2)  #'1, {}, 2'

[[fill]align][sign][#][0][width][grouping_option][.precision][type]

[align] 指定对齐的方式
在这里插入图片描述

[width] 指定宽度

"{:^10}".format(250)  #'   250    '

":"是必需的,它的左边是位置或者关键字索引,右边才是格式化选项

"{1:>10}{0:<10}".format(520, 250)  #'       250520       '

在这里插入图片描述

"{left:>10}{right:<10}".format(right=520, left=250)  #'       250520       '

**[0]**是在指定的宽度前面添加的,表示为数字类型启用感知正负号的0填充效果,只对数字有效

"{:010}".format(520)  #'0000000520'
"{:010}".format(-520)  #'-000000520'

还可以再对其选项的前面通过填充选项来指定填充的字符

"{1:%>10}{0:%<10}".format(520, 250)  #'%%%%%%%250520%%%%%%%'

"{:0=10}".format(520)  #'0000000520'
"{:0=10}".format(-520)  #'-000000520'

[sign] 符号类型,仅对数字有效
在这里插入图片描述

"{:+}  {:-}".format(520, -250)  #'+520  -250'

[grouping_option] 千分位的分割符,有两个值可以选择,一个是逗号,一个是下横线
如果位数不足,千位分隔符是不显示的

"{:,}".format(1234)  #'1,234'
"{:_}".format(1234)  #'1_234'
"{:,}".format(123)  #'123'
"{:,}".format(123456789)  #'123,456,789'

[.precision] 精度,只需要填入一个十进制的整数,对于不同类型的参数它的效果是不一样的
对于[type]设置为‘f’或‘F’的浮点数来说,是限定小数点显示多少个位数;
对于[type]设置为‘g’或‘G’的浮点数来说,是限定小数点前后一共显示多少个数位;
对于非数字类型来说,限定的是最大字段的大小;
对于整数类型来说,则不允许使用[.precision]选项

"{:.2f}".format(3.1415) #'3.14'
"{:.2g}".format(3.1415)  #'3.1'
"{:.6}".format("I love FishC")  #'I love'----类似于截取功能
"{:.2}".format(520)  #报错

[type] 类型选项,决定了数据应当如何来呈现
在这里插入图片描述
上述表格适用于整数

"{:b}".format(80)  #'1010000'
"{:c}".format(80)  #'P'

[#] 表示参数以二进制、八进制或者十六进制在字符串中输出的时候,他会自动追加一个前缀

"{:#b}".format(80)  #'0b1010000'
"{:#o}".format(80)  #'0o120'

在这里插入图片描述
上述表格适用于浮点数和复数

"{:e}".format(3.1415)  #'3.141500e+00'
"{:E}".format(3.1415)  #'3.141500E+00'
"{:f}".format(3.1415)  #'3.141500'
"{:g}".format(123456778)  #'1.23457e+08'---精度为6
"{:g}".format(12345.6778) #'12345.7'---精度为6
"{:%}".format(0.98)  #'98.000000%'----默认精度为6
"{:.2%}".format(0.98)  #'98.00%'

python支持通过关键字参数来设置选项的值

"{:.{prec}f}".format(3.1415, prec=2)  #'3.14'

"{:{fill}{align}{width}.{prec}{ty}}".format(3.1415, fill='+', align='^', width=10, prec=3, ty='g')   #'+++3.14+++'
f-字符串 (f-string)

只要在普通的字符串前面加上一个f-/F-作为一个前缀就可以了
可以看作是format方法的一个语法糖,进一步简化了格式化字符串的一个操作,并且带来了性能上的略微提升
在这里插入图片描述

year = 2019
"工作室成立于 {} 年".format(year)  #'工作室成立于 2010 年'
F"工作室成立于 {2019} 年"  #'工作室成立于 2019 年'
f"{-520:010}"  #'-000000520'
f"{3.1415:.2f}"  #'3.14'

fill='+'
align='^'
width=10
prec=3
ty='g'
f"{3.1415:{fill}{align}{width}.{prec}{ty}}"   #'+++3.14+++'

f-字符串是python3.6以后的产物
format方法兼容性更高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值