Python学习之字符串

字符串

字符串与元组一样都是不可变的

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'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值