字符串
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方法兼容性更高