字符串是程序常用的数据类型,在实际应用中经常需要对字符串进行增、删、减、查找、截取、格式化等操作。
访问与截取
python中的字符串由于属于序列,故可以用“索引”、“切片”访问与截取子串,也可以用split()获取。
str1='我今年才十八岁'
str2='numbers:1,2,3,4,5,6,7,8,9,10'
print(str1[])#索引
print(str1[:3])#切片
print(str1[:3:2])#切片,设置步长为2
out:
我
我今年
我年
#split()一般是对有规律的字符串分隔,默认分隔符为空格
print(str2.split(','))
out:
['numbers:1','2','3','4','5','6','7','8','9','10']
#将字符串分隔为3个子串
print(str2.split(',',2))
out:
['numbers:1','2','3,4,5,6,7,8,9,10']
格式化
python将若干值插入到带有“%”标记的字符串中
“%S%S”%(str1,str2)
一个字符串输出
print('字符串%s操作 '%('格式化'))
out:
字符串格式化操作
混合格式输出
print('今天是%d年%d月%d日%s'%(20118,4,6,'农历二月二十一'))
out:
今天是20118年4月6日农历二月二十一
动态随机格式化输出
importrandom
str=['小明','小红','小黄','小白','小黑','小雪']
foriinrange(1,4):
random_num = random.randint(1,len(str))
print('第%d名是%s'% (i,str[random_num-1]))
str.pop(random_num-1)
out:
第1名是小黄
第2名是小明
第3名是小雪
python格式化字符串的替代符及其含义
对齐
str='今晚吃鸡,大吉大利!'
print(str)
print(str.center(20))#左右两侧各输出5个空格
print(str.center(20,"*"))#左右两侧各输出*号
print(str.ljust())#左对齐,默认输出值
print(str.ljust(20,'*'))#左对齐,并填充*号
print(str.rjust(20))#右对齐
print(str.rjust(20,'*'))#右对齐,并填充*号
out:
今晚吃鸡,大吉大利!
今晚吃鸡,大吉大利!
*****今晚吃鸡,大吉大利!*****
今晚吃鸡,大吉大利!
今晚吃鸡,大吉大利!**********
今晚吃鸡,大吉大利!
**********今晚吃鸡,大吉大利!
转义
计算机中存在可见字符和不可见字符。可见字符是指键盘上的字母、数字和符号,不可见字符是指换行、回车等字符。对于不可见字符可以使用转义符来表示,python中用“\”作为转义符。
print('小明:\"今晚吃什么?\"')
print('小红:\"我们\'吃鸡\'吧!\"')
out:
小明:"今晚吃什么?"
小红:"我们'吃鸡'吧!"
r格式原字符串输出(无须输入转义符,可减少输入操作)
str=r'小明说:"下雨了!"'
print(str)
out:
小明说:"下雨了!"
python转义字符表
合并
“+”号合并
str1='我今年才十八岁'
str2='但生活像极了八十岁'
print(str1 +','+ str2)
out;
我今年才十八岁,但生活像极了八十岁
join()函数合并
str1='我今年才十八岁'
str2='但生活像极了八十岁'
str3='你说可笑不可笑?'
str=[str1,str2,str3]
print(','.join(str))
out:
我今年才十八岁,但生活像极了八十岁,你说可笑不可笑?
两种方式各有千秋,哪种方便就用哪种。
查找
find(substring,[,start[,end]])
substring带查找的子串
start开始搜索的索引位置
end结束搜索的索引位置
str1='今年是2018年'
print(str1.rfind('年'))
print(str1.find('年'))
print(str1.find('今年'))
print(str1.rfind('今年'))
print(str1.find('今天'))
print(str1.rfind('今天'))
out:
7
1
-1
-1
find()函数与rfind()函数是有区别的,find()函数是从头部开始查找到尾部,而rfind()函数是从尾部查找到头部。当查到的子串是唯一值时,两函数返回的索引值一致,但存在多个值时,两函数返回的索引值不同。但无值时,返回的结果均为-1。
替换
replace(old,new,[,max])
old将被替换掉额字符串
new替换old的字符串
max使用new替换old的次数,默认值为全部替换
str1='hello world,hello china '
print(str1.replace('hello','hi'))
print(str1.replace('hello','hi',1))
print(str1.replace('hello','hi',2))
out:
hi world,hi china
hi world,hello china
hi world,hi china
转换
从时间到字符串的转换
日期类型转换为字符串类型,采用的time模块的strftime()函数
strftime(formate[,tuple])
formate格式化日期的特殊字符,如“%Y-%m-%d”
tuple需要转换的时间,用元祖储存,其元素分别表示年、月、日、时、分、秒。
importtime
时间到字符串转换
print(time.strftime('%Y-%m-%d %X'),time.localtime())
out:
2018-04-06 21:51:55
time.struct_time(tm_year=2018,tm_mon=4,tm_mday=6,
tm_hour=21,tm_min=51,tm_sec=55,tm_wday=4,tm_yday=96,tm_isdst=)
从字符串到时间的转换
字符串到时间转换需要进行两次转换,采用time模块和datetime类。先用strptime函数转换为元祖,在用datetime函数转化为时间
日期格式化符号表
运算
python直接用“==”、“!=”运算符比较两个字符串的内容。
str1='我今年才十八岁'
str2='numbers:1,2,3,4,5,6,7,8,9,10'
str3='numbers:1,2,3,4,5,6,7,8,9,10'
deffunc(x,y):
ifx==y:
print("相同")
else:
print("不相同")
func(str1,str2)
func(str1,str3)
func(str2,str3)
out:
不相同
不相同
相同
*号重复输出
print('hello\n'*3)
out:
hello
hello
hello
in判断
str='apple'
if'a'instr:
print('存在a字符串')
if's'not instr:
print('不存在s字符串')
反转
列表reverse()函数反转
str1='我今年才十八岁'
defreverse(s):
li=list(s)
li.reverse()
s="".join(li)
print(s)
reverse(str1)
out:
岁八十才年今我
切片反转
str1='我今年才十八岁'
defreverse(s):
print(s[::-1])
reverse(str1)
三引号原味输出
str='''
静夜思
唐朝诗人 李白 字太白
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。
'''
print(str)
out:
静夜思
唐朝诗人 李白 字太白
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。
领取专属 10元无门槛券
私享最新 技术干货