字符串
字符串与元组一样都是不可变的。
tip: 回文数 正反读的读音都相同
>>> x = '12345'
>>> "是回文数" if x == x[::-1] else "不是回文数"
'不是回文数'
>>> x = '12321'
>>> "是回文数" if x == x[::-1] else "不是回文数"
'是回文数'
大小写字母换来换去
>>> x = 'I love FishC' # 有大写有小写
>>> x.capitalize()
'I love fishc' # 是生成的字符串, X还是没有变
>>> x.casefold()
'i love fishc' # 都变成小写
>>> x.title() # 首字母大写
'I Love Fishc'
>>> x.swapcase() # 首字母小写,其它大写
'i LOVE fISHc'
>>> x.upper() #全部大写
'I LOVE FISHC'
>>> x.lower() # 全部小写
'i love fishc'
左中右对齐
>>> x = "有内鬼,停止交易!"
>>> x.center(5) # 小于字符串的个数会默认全部打印出来
'有内鬼,停止交易!'
>>> x.center(15) # 15个字符,系统默认选择合适位置对齐
' 有内鬼,停止交易! '
>>> x.ljust(15) #左对齐 (left)
'有内鬼,停止交易! '
>>> x.rjust(15) #右对齐 (right)
' 有内鬼,停止交易!'
>>> x.zfill(15) #右对齐,前面欠缺默认用0代替。
'000000有内鬼,停止交易!'
>>> "520".zfill(5)
'00520'
>>> "-520".zfill(5)
'-0520'
>>> x.center(15,"淦") # center 函数后面有个默认值是空格,自己可以DIY。
'淦淦淦有内鬼,停止交易!淦淦淦'
字符串的查找
语法格式:
count(sub[,start[,end]])
find(sub[,start[,end]]) 从左往右找
**rfind(sub[,start[,end]]) ** 从右往左找
>>> x = "上海自来水来自海上"
>>> x.count("海") # 计算字符串中“海”的个数
2
>>>
>>> x.count("海",0,5) # start和end代表的查找的起始和结束位置
1
>>> # 查找字符串里某个子字符的索引
>>> x.find("海")
1
>>> x.rfind("海")
7
>>>
>>> x.find("龟") # 如果查找不存在,find()方法会返回 -1
-1
>>> x.index("龟") # 如果查找不存在,index()程序会报错
Traceback (most recent call last):
File "<pyshell#8>", line 1, in <module>
x.index("龟")
ValueError: substring not found
>>>
字符串的替换
expandtabs([tabsize=8]) –使用空格代替制表符
>>> code = """
print(“ I love FishC")
print("I love my wife")"""
>>>
>>> new_code = code.expandtabs(4)
>>>
>>> print(new_code)
print(“ I love FishC")
print("I love my wife")
>>>
replace(old,new,count=-1)
>>> "在吗!我在你家楼下,快点下来!!!".replace("在吗","想你")
'想你!我在你家楼下,快点下来!!!'
>>>
**translate(table) ** table 代表的是你需要用到表格的变量名
>>> table = str.maketrans("ABCDEFG","1234567")
>>> "I love FiscC".translate(table)
'I love 6isc3'
>>>
字符的截取
>>> " 左侧不要留白".lstrip()
'左侧不要留白'
>>> "右侧侧不要留白 ".rstrip()
'右侧侧不要留白'
>>> "www.ilovefishc.com".lstrip("wcom.")
'ilovefishc.com'
>>> "www.ilovefishc.com".rstrip("wcom.")
'www.ilovefish'
>>> "www.ilovefishc.com".strip("wcom.")
'ilovefish'
>>>
# strip()函数就是截取()内的内容,如果()中有内容就删掉对应的内容。
# 但注意的是 如strip("wcom.") 截取的是单字符w、c、o、m、. 。
#
如果要删的指定的字符:
removeprefix(prefix)
removesuffix(suffix)
这两个函数允许你指定将要删除的前缀或后缀
>>> "www.ilovefishc.com".removeprefix("www.")
'ilovefishc.com'
>>> "www.ilovefishc.com".removesuffix(".com")
'www.ilovefishc'
>>>
拆分和拼接
拆分
partition(sep)
repartition(sep)
>>> "www.ilovefishc.com".partition(".")
('www', '.', 'ilovefishc.com')
>>>
>>> "ilovefishc.com/python".rpartition("/")
('ilovefishc.com', '/', 'python')
>>>
spli(sep=None, maxsplit=-1)
>>> "苟日新,日日新,又日新".split(",")
['苟日新', '日日新', '又日新']
>>> "苟日新 日日新 又日新".split() # 默认截取的是空格
['苟日新', '日日新', '又日新']
>>>
>>> "苟日新,日日新,又日新".split(",",1) # 默认是 -1,找到就切找到就切
# 如果我们改为1,就只切一刀
['苟日新', '日日新,又日新']
>>> "苟日新,日日新,又日新".rsplit(",",1) # .rsplit() 是从右往左切 切一刀同上
['苟日新,日日新', '又日新']
>>>
问:如果叫你切 换行符怎么办。
>>> "苟日新\n日日新\n又日新".split("\n",)
['苟日新', '日日新', '又日新']
>>>
在不同操作系统下的换行符
在Linux是 \n
在Mac OS是 \r
在Windows 是 \r\n
像以下都要改?万一是混合有\n 又有\r 怎么办?
>>> "苟日新\r日日新\r又日新".split("\r",)
['苟日新', '日日新', '又日新']
答案是: splitliness(keepends=False)
换行,
>>> "苟日新\n日日新\n又日新".splitlines()
['苟日新', '日日新', '又日新']
>>> "苟日新\n日日新\r又日新".splitlines()
['苟日新', '日日新', '又日新']
>>>
拼接
join(iterable)
: " " .join( ) 相当于每起字符用" " 双引号内的元素相隔
当你不向" " 添加东西的时候,效果就能达到字符号的加号拼接一般。(了参考 比较案例一。
>>> ".".join(["www","ilovefisc","com"])
'www.ilovefisc.com'
>>>
>>> "^".join(("F","ish","C"))
'F^ish^C'
>>>
字符串的加号拼接:
比较案例 一
>>> s = "FishC"
>>> s += s
>>>
>>> s
'FishCFishC'
#
# -------------------------------- 效果相同
# -------------------------------- 但添加的东西数量级越大时,join的效率远远大于 + 号
>>> "".join(("FiscC","FishC"))
'FiscCFishC'
>>>
格式化字符串
.format()
使用一对花括号代表代替字段,然后将要填的内容放到format(括号里的参数。
>>> year = 2010
>>> '鱼C工作室成立于 year 年 ' # 显然这样不能打印,被当做了字符串。
'鱼C工作室成立于 year 年 '
>>> '鱼C工作室成立于 {} 年 '.format(year)
'鱼C工作室成立于 2010 年 '
一个括号对于()里的参数
>>> "1+2={}, 2的平方是{}, 3的立方是{}".format(1+2,2*2,3*3*3)
'1+2=3, 2的平方是4, 3的立方是27'
{} 中也可以填参数(索引)
>>> "{}看到{}就很激动!".format("小甲鱼","漂亮的小姐姐")
'小甲鱼看到漂亮的小姐姐就很激动!'
# 小甲鱼的索引值是0, 漂亮的小姐姐的索引值是1.
>>> "{1}看到{0}就很激动!".format("小甲鱼","漂亮的小姐姐")
'漂亮的小姐姐看到小甲鱼就很激动!'
索引可被多次引用:
>>> "{0}{0}{1}{1}".format("是","非")
'是是非非'
关键字参数也可以
>>> "我叫{name},我爱{fav}。".format(name="小甲鱼",fav="Python")
'我叫小甲鱼,我爱Python。'
>>> "我叫{name},我爱{0}。喜爱{0}的人,运气都不会太差".format(1,2)
位置索引和关键字也可以同时使用:
>>> "我叫{name},我爱{0}。喜爱{0}的人,运气都不会太差".format("Python",name="小甲鱼")
'我叫小甲鱼,我爱Python。喜爱Python的人,运气都不会太差'
花括号是代替字符串站位用的,如果单单要输入{} 怎么办?
>>> "{},{},{}".format(1,"{}",2)
'1,{},2'
>>> "{},{{}},{}".format(1,2)
'1,{},2'
符号选项(只对数字有效)
值|含义|
|---|---|
‘+’|正数在前面添加正号(+),负数在前面添加符号(- )号|
'-' |只有负数在前面添加符号(-), 默认行为|
空格|正数在前面添加一个空格,负数在前面添加负号(-)|
>>> "{:+} {:-}".format(520,-250)
'+520 -250'
>>> "{:,}".format(1234)
'1,234'
>>> "{:_}".format(1234)
'1_234'
>>> "{:,}".format(123) # 如果位数不足,千位分隔符是不显示的
'123'
>>> "{:,}".format(123456789)
'123,456,789'
>>>
精度选项
- 对于[type] 设置为 ‘f’ 或 ‘F’ 的浮点数来说,是限定小数点后显示多少个数位
- 对于[type] 设置为 ‘g’ 或 ‘G’ 的浮点数来说,是限定小数点前后一共显示多少个数位
- 对于非数字类型来说,限定的是最大字段的大小
- 对于整数来说,则不允许使用**[.precision]** 选项
>>> "{:.2f}".format(3.1415) # 小数点后保留2位的精度
'3.14'
>>> "{:.2g}".format(3.1415)
'3.1'
>>> "{:.6}".format(3.1415)
'3.1415'
>>> "{:.6}".format("I love FiscC")
'I love'
>>> "{:.2}".format(520)
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
"{:.2}".format(520)
ValueError: Precision not allowed in integer format specifier
>>> # 精度选项不允许对整数,所以报错
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zKjHycNl-1615389727889)(C:\Users\君莫笑\AppData\Roaming\Typora\typora-user-images\image-20210310223926737.png)]
>>> "{:b}".format(80)
'1010000'
>>> "{:c}".format(80)
'P'
>>> "{:d}".format(80)
'80'
>>> "{:o}".format(80)
'120'
>>> "{:x}".format(80)
'50'
>>>
>>> "{:#x}".format(80)
'0x50'
>>> "{:#o}".format(80)
'0o120'
>>> "{:#b}".format(80) # 这里添加#之后,输出的结果中会包含0x,0b...会加一个这样的前缀,方便确认是什么进制
'0b1010000'
>>>
f-字符串 – Python3.6 新加语法
>>> F"鱼C工作室成立于{year}年" # 相当于格式串的升级,更加方便
'鱼C工作室成立于2010年'
>>> f"1+2={1+2},2 的平方是{2*2},3的立方是{3*3*3}" # F 和 f 都一样的
'1+2=3,2 的平方是4,3的立方是27'
>>> "{:010}".format(-520) # 10 是 代表设置10个宽度, 0是代表感知负数
'-000000520'
>>> f"{-520:010}" # f 字符串的使用
'-000000520'
>>>
>>> "{:,}".format(123456789)
'123,456,789'
>>> f"{123456789:,}"
'123,456,789'
>>>
>>> "{:.2f}".format(3.1415)
'3.14'
>>> f"{3.1415:.2f}"
'3.14'
>>>
>>> "{:{fill}{align}{width}.{prec}{ty}}".format(3.1415,fill="+",align="^",width=10,prec=3,ty="g")
'+++3.14+++'
>>> fill = '+' # 让填充的符号为+号
>>> align = '^' # 强制让内容居中
>>> width = 10 # 宽度为10
>>> prec = 3 # 精度为3
>>> ty = 'g' # 限制小数点前后一个多少个数位
>>> f"{3.1415:{fill}{align}{width}.{prec}{ty}}"
'+++3.14+++'
>>>
字符串的对齐
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kaci4iG8-1615389727891)(C:\Users\君莫笑\AppData\Roaming\Typora\typora-user-images\image-20210309220458920.png)]
>>> "{:^}".format(250)
'250'
>>> "{:^10}".format(250) # 10
' 250 '
# {1:>10}中的 1 是位置索引,指的是索引为1的参数在这里是 250
> 是对齐方向, 箭头指向右,向右对齐。 10 是显示宽度。
>>> "{1:>10}{0:<10}".format(520,250)
' 250520 '
# 不用位置索引,用 关键字 也可以的。
>>> "{left:>10}{right:<10}".format(right=520,left=250)
' 250520 '
字符前的填充
>>> "{:010}".format(520) # 第一个0 代表的是填充的字符
'0000000520'
>>> "{:010}".format(-520)
'-000000520'
>>> "{:010}".format("FIshic) # 填充0只对正负的数有用,对字符串无效。
SyntaxError: EOL while scanning string literal
另一种填充写法
>>> "{1:%>10}{0:%<10}".format(520,250)
'%%%%%%%250520%%%%%%%'
>>> "{:0=10}".format(520) # 等号左边写所要填充的字符
'0000000520'
>>> "{:0=10}".format(-520)
'-000000520'