Python-字符串

字符串驻留

对相同的字符串只保留一份拷贝,后续创建的相同字符串 不会开辟空间 而是把该字符串的地址赋给新创建的变量
因为python会把创建的字符串放在字符串池中 需要时就拿出来使用 避免频繁创建和销毁

拼接时join比+好 因为join()会先计算出所有字符中的长度再拷贝 只new一次对象

a = 'asd'
b = "asd"
c = '''asd'''
a is b# true
b is c# true

发生驻留的集中情况

1.字符串的长度为0或1时
2.符合标识符的字符串(编译器可以忽略这个)

a = '123%'
b = '123%'
a is b#false 因为%不是标识符 标识符是字母数字下划线

3.字符串只在编译时进行驻留 运行时不驻留

a = 'abc'
b = 'ab'+'c'#在运行之前就已经连接完毕了
c = ' '.join(['ab','c'])#输出也是abc 程序运行的时候才合并的
a is b#true
b is c#false

4.[-5,256]之间的整数数字

查找

count(查找有几个)

a.cout(‘想要找的字符’,起始点,终止点)#[起始点,终止点]

a = "abada"
a.count('a')#3
a.cout('a',0,2)#2

find(查找在哪)

a = "ababa"
a.find("b")#1从左往右
a.rfind("b")#3从右往左找第一个

index和find的区别在于如果没找到index直接抛出ValueError异常 find返回-1
index和find找出字串第一次出现的位置 rindex和rfind找出最后一次出现的位置 返回的是负索引

startswith(查找第一个是否是这个字符串)

endswith同样 查找
startswith(“a”,1,4)#从这个区间开始算是否是第一个

x = "abcdefg"
x.startswith("abc")#true
x.startswith("bc",1,3)#true
x.startswith("f",2,5)#true包括最后一个

使用方法

x = "小明参加了活动"
if s.startswith(("小明","小红","效率")):
	print("有人参加活动")#有人参加活动

常用操作

转换

upper 全转大
lower 全转小
swapcase 大转小 小转大
capitalize 第一个字符变大写 其他小写
title 每个单词的第一个字符变大写 其余变小写
istitle 判断每个单词的第一个字符是大写吗
isupper 判断所有字母是否都是小写
可以s.upper().isupper()#一定是true
isalpha 判断字符串是否全是由字母构成
isspace 判断字符串是否为空字符串 " \n\t"#true 空格制表符和他们俩的转义字符都算空白字符
isprintable 判断字符串是否能打印 含有转义字符是不能打印的 返回false

判断字符串中是否全是数字
isalnum 集大成者 只要是isalpha,isdecimal,isdigit,isnumeric中任何一个返回的是true 他就是true
isdecimal 只能容忍1234这样的是数字
isdigit 能容忍数学符号和1234
isnumeric 什么都能容忍 罗马数字 中文数字 1234 繁体都行
请添加图片描述

这些转化后都是新的字符对象
expendtabs(4)将字符串中的tab转换成4个空格
replace(old,new,count) 将字符串中old字符串替换成new字符串 替换count次 默认值count是-1 也就是默认替换全部
translate(转换表格) 根据转化表格对字符串进行替换
str.maketrans(要被替换字符串,替换字符串,要被忽略字符串)

table  = str.maketrans("abcdefg","1234567","不要不要")#这个置换表格表示了 a要替换成1   b要替换成2 c要替换成3以此类推依次替换 并且忽略"不要不要"
"我不要不要是第a个,快来啊第cde个".translate(table)#我是第1个,快来啊第345个

对齐

center 居中 第一个参数指定宽度 第二个参数指定填充符号 默认是空格
ljust左对齐
rjust右对齐
zfill 右对齐 左边用0填充 只接受一个参数

分割

split(sep, maxsplit) 左边分割 默认以空格作为分割 返回列表

sep为分隔符 maxsplit最大分割次数

str = 'abcabca'
print(str.split('a'))#['', 'bc', 'bc', '']
#输入时用空格分割
a,b,c = map(int, input().split())

partition()以某个指定字符做分割

从左往右找这个字符 然后进行依次分割

"www.baidu.com".patition(".")#("www",".","baidu.com")
"www.baidu.com".rpatition(".")#("www.baidu",".","com")

strip()剔除

默认是剔除空格

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

指定剔除
左右的剔除规则是
例如lstrip(“wcom.”) 是从最左边开始匹配 逐字符找是否和wcom.中的字符匹配的 只要有就剔除 直到找到第一个不匹配的就停止

str = "www.ilovefishc.com"
str.lstrip("wcom.");#ilovefishc.com
str.rstrip("wcom.");#www.ilovefishc
str.strip("wcom.");#ilovefishc

sep指定分割符 maxsplit指定最大分割次数
rsplit 右边分割

连接

join()

".".join(["www","baidu","com"])#"www.baidu.com"
"".join(("aaa","bbb"))#aaabbb  
#等价于 但是下面这种效率更低
x = "aaa"
y ="bbb"
s = x+y

判断

请添加图片描述

替换

replace()

第一个参数指定被替换字串
第二个参数指定替换字串的字符串
第三个参数指定最大替换次数
原字符串不变 产生新的字符串

s = 'abcbaccd'
b = s.replace('c','bbb',3)
print(s)#abcbaccd
print(b)#abbbbbabbbbbbd

join()

将列表或元组中的字符串合并成一个字符串

获得原始值ord()和原始值的字符chr()

print(ord('a'))# 97
print(chr(97))# a

切片

s[起始点:终止点:步长]

s = 'abcde'
ss = s[2:]#cde
a = s[::-1]#edcba

格式化

name = '张三'
age = 13
print('我叫%s,今年%d岁'%(name,age))
print('我叫{0},今年[1]岁'.format(name,age))
print(f'我叫{name},今年{age}岁')
print('{0:10.3}'.format(age))#10表示宽度 .3表示只显示三位数 .3f才是显示三位小数

ord()将单个字符转换成编码

print(ord('a'))#97

填充

format(可以被f替换)

f字符串

下面的一切都可以被f替换

name = "张三"
age = 12
sex = "男"
"我叫{},我今年{}岁了,我是{}生".format(name,age,sex)#我叫张三,我今年12岁,我是男生
# 可以被写成
f"我叫{name},我今年{age}岁了,我是{""}生"#我叫张三,我今年12岁,我是男生
fill = '+'
align = '^'
width = 10
prec = 3
ty = 'g'
"{:{fill}{align}{width}.{prec}{ty}}".format(3.1415,fill,align,width,prec,ty)#+++3.14+++
f"{3.1415:{fill}{align}{width}.{prec}{ty}}"#+++3.14+++
索引
name = "张三"
age = 12
"我叫{},我今年{}岁了,我是{}生".format(name,age,"男")#我叫张三,我今年12岁了,我是男生
#可以填入索引
"我叫{1},我今年{1}岁了,我是{0}生".format(name,age,"男")#我叫12,我今年12岁了,我是张三生
# 关键字
"我叫{name},我今年{age}岁了,我是{sex}生".format(name = "张三",age = "12",sex = "男")#我叫张三,我今年12岁了,我是男生 
# 可以混合使用
"我叫{name},我今年{1}岁了,我是{sex}生".format(name = "张三",age = "12",sex = "男")#我叫张三,我今年12岁了,我是男生
{}中的格式
填充和对齐
"{1:%>10}{0:q<10}.format(111,000)"#%%%%%%%000111qqqqqqq
"{:0=10}".format(-520)#-0000000520也就是-号为符号 520是数字 所以0在这之间进行填充

第一个1表示用索引1的对象 也就是111
第二个:表示后面规定格式
%表示用%来填充多余位置
>表示向左对齐 <表示向左对齐 ^表示居中 =表示将填充放置在符号(如果有)之后但是在数字之前的位置
10表示占是10个位置

正负号显示
"{:+}{:+}".format(1,-1)#+1-1
"{:-}{:-}".format(1,-1)#1-1  这种是默认的
"{: }{: }".format(1,-1)# 1-1
分隔符

“{:,}”.format(12345678)#12,345,678 千位进行分割
“{:_}”.format(12345678)#12_345_678 千位进行分割

显示多少位

“{:.2f}”.format(3.14)#3.14表示小数点后只能显示2位
“{:.2g}”.format(3.14)#3.1表示小数点前后只能显示2位
“{:.4}”.format(“abcdefg”)#abcd表示截取4位
“{:.2}”.format(312334)#报错 不能用于整数

输出格式

请添加图片描述
请添加图片描述
请添加图片描述

map()

返回的是迭代器 迭代器只能使用一次
长度不一致选短的

a,b = map(int,input.split())//多对象输入
x = map(ord,"FishC")//"FishC"字符串执行ord函数 ord就是转换成ascall码表的数
print(list(x)) #[70,105,115,104,67]
x = map(pow,[1,2,3])# 执行pow函数 [1,4,9]
x = map(pow,[2,3,10],[5,2,3])#[32,9,1000]

filter()

返回迭代器
与map的区别是 只有结果是true的才会被筛选出来

x = filter(str.islower,"Fish")#['i','s','h']只有小写能被筛选出来
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值