Python基础-数据类型之字符串

一、字符串的定义

name = 'kitty'

1:单引号、双引号、三引号都可以用来定义字符串

例:name = 'kitty', name = "kitty", name = """kitty"""三种方式都是可以的

2:当字符串中已经有单引号或双引号时,需要用双引号或单引号来定义字符串

例:str = "my name is 'kitty' ", str = 'my name is "kitty" '

3:三引号可以定义带有换行符的多行字符串

例:

str = """this is apple
      this is book"""

注:字符串是不可修改的。

二、字符串的操作

字符串是序列中的一种,因此序列的基本操作,字符串也适用(序列的基本操作

1:字符串的转化

使用str()方法,可以将任意数据类型转换成字符串。

nums = 12345
print(type(nums))      # <class 'int'>
nums = str(nums)
print(type(nums), nums)   # <class 'str'> 12345
list_1 = [2,3,4,5] 
print(type(list_1))     # <class 'list'>
list_str = str(list_1)
print(type(list_str), list_str)  # <class 'str'> [2, 3, 4, 5]

2:字符串的格式化

2.1:字符串格式化符号

符号含义
%s(常用)格式化字符串
%d(常用)格式化整数
%f(常用)格式化浮点数字,可指定小数点后的精度
%c格式化字符及其ASCII码
%u格式化无符号整型
%o格式化无符号八进制数
%x格式化无符号十六进制数
%X格式化无符号十六进制数(大写)
%e用科学计数法格式化浮点数
%E作用同%e,用科学计数法格式化浮点数
%g%f和%e的简写
%G%f 和 %E 的简写
%p用十六进制数格式化变量的地址
name = "kitty"
age = 14
grade = 99.5
str1 = "我的姓名是:%s,年龄是:%d,考试成绩是:%0.2f" %(name, age, grade)
print(str1)     # 我的姓名是:kitty,年龄是:14,考试成绩是:99.50

注意:在传值的时候,必须严格按照位置与%s(d/f)一一对应。

对应的数据类型错误时,会报错

name = "kitty"
age = 14
grade = 99.5
str1 = "我的姓名是:%s,年龄是:%d,考试成绩是:%0.2f" %(age, name, grade)
# 报错,TypeError: %d format: a number is required, not str
print(str1)

%0.2f中的0.2表示保留几位小数,0.2表示保留两位小数,0.1表示保留1位小数

2.2:format:用{}占位,不指定数据类型,数据可多不可少

name = "kitty"
age = 14
grade = 99.5
str1 = "我的姓名是:{},年龄是:{},考试成绩是:{}".format(name,age,grade)
print(str1)   # 我的姓名是:kitty,年龄是:14,考试成绩是:99.5

str2 = "我的姓名是:{name},年龄是:{age},考试成绩是:{grade}".format(name=name,age=age,grade=grade)
print(str2)   # 我的姓名是:kitty,年龄是:14,考试成绩是:99.5

str3 = "我的姓名是:{0},年龄是:{1},考试成绩是:{2}".format(name,age,grade)
print(str3)   # 我的姓名是:kitty,年龄是:14,考试成绩是:99.5

str4 = "我的姓名是:{0},年龄是:{2},考试成绩是:{1}".format(name,age,grade)
print(str4)   # 我的姓名是:kitty,年龄是:99.5,考试成绩是:14

用{}占位时,可以不填参数名,也可以填参数名,还可以填参数的索引位置

不填参数名,取值就按照传递的参数从左往右依次取值

填了参数名,format传值时,需要使用关键字进行传值,取对应关键字的值

填了索引值,format中的值,从0开始,按照索引对应的值进行取值,不可以超过format中的值的索引,超过了会报错

2.3:f-string:字符串前加f,将对应的值传入到对应的位置

name = "kitty"
age = 14
grade = 99.5
str1 = f"我的姓名是:{name},年龄是:{age},考试成绩是:{grade}"
print(str1)   # 我的姓名是:kitty,年龄是:14,考试成绩是:99.5

3:join():按照自定义方法连接列表中的元素为字符串

str.join(object)    # object为要连接的元素序列

返回值为:通过指定str字符连接序列中的元素后,生成的新字符串

list_a = ['a', 'b', 'c']
result = "".join(list_a)
print(result, type(result))     # abc <class 'str'>
result1 = " ".join(list_a)
print(result1, type(result1))   # a b c <class 'str'>
result2 = ".".join(list_a)
print(result2, type(result2))   # a.b.c <class 'str'>

4:切割字符串split():从左往右通过指定分隔符对字符串进行切片,可指定切割次数

str.split(str,num) 

# str为分割符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等

# num为分割次数,默认为-1,分割所有

返回值为:分割后的字符串组成的新列表

str_a = "1a2a 13a14"
# 以'a'进行切割,全部切割
result = str_a.split('a')
print(result)       # ['1', '2', ' 13', '14']
# 默认以空格切割
result1 = str_a.split()
print(result1)      # ['1a2a', '13a14']
# 以'a'进行切割,切割两次
result2 = str_a.split('a', 2)
print(result2)      # ['1', '2', ' 13a14']

rsplit():从右往左通过指定分隔符对字符串进行切片,可指定切割次数。

str.rsplit(str,num) 

# str为分割符,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等

# num为分割次数,默认为-1,分割所有

返回值为:分割后的字符串组成的新列表

str_a = "1a2a 13a14"
result = str_a.rsplit('1', 2)
print(result)     # ['1a2a ', '3a', '4']

5:replace():从左往右依次替换字符串中的指定字符,可指定替换个数,默认全部替换。

str.replace(oldstr,newstr,max)

# oldstr:表示被替换的子字符串

# newstr:新字符串,替换oldstr的子字符串

# max:表示最大替换的个数

返回值为:被newstr替换后的新字符串,不修改原字符串

str_a = "1a2a13a14"
# 将'a'替换成'aa'
result = str_a.replace('a','bb')
print(result, str_a)     # 1bb2bb13bb14 1a2a13a14
# 将'a'替换成'=',最多替换2次
result1 = str_a.replace('a', '=', 2)
print(result1)           # 1=2=13a14

6:find():从左往右查找子字符串在字符串中第一次出现的索引位置。可指定查找的起始位置。

str.find(str, start, end)

# str:表示要查找的子字符串

# start:表示查找的开始位置,默认为0

# end:表示查找的结束位置,默认为字符串的长度

返回值为:如果存在,则返回包含子串的第一个字符所在的索引位置;如果没有找到,则返回-1

str_a = "1a2a13a14"
result = str_a.find('a13')
print(result)      # 3
# 指定起始位置
result1 = str_a.find('1', 2, 8)
print(result1)     # 4
# 找不到
result2 = str_a.find('123')
print(result2)     # -1

rfind():从右往左查找子字符串在字符串中第一次出现的索引位置(及从左往右子字符串在字符串中最后一次出现的索引位置)。可指定查找的起始位置。

str.find(str, start, end)

# str:表示要查找的子字符串

# start:表示查找的开始位置,默认为0

# end:表示查找的结束位置,默认为字符串的长度

返回值为:如果存在,则返回包含子串的第一个字符所在的最后一次出现的索引位置;如果没有找到,则返回-1

str_a = "1a2a13a14"
result = str_a.rfind('a')
print(result)      # 6
result1 = str_a.rfind('a', 1, 6)
print(result1)     # 3
result2 = str_a.rfind('12')
print(result2)     # -1

7:isdigit():判断字符串是否由纯数字组成。

str.isdigit()

返回值为:只包含数字返回True,否则返回False。

num_str = "123456"
result = num_str.isdigit()
print(result)       # True
num_str_1 = "12345a"
result1 = num_str_1.isdigit()
print(result1)      # False

8:index():字符串中是否包含子字符串,包含则返回子字符串第一个字符第一次出现的索引位置,与find()方法一样,但是如果子字符串不在字符串中,会报错.

str.index(str, start, end)

# str:表示要查找的子字符串

# start:表示查找的开始位置,默认为0

# end:表示查找的结束位置,默认为字符串的长度

返回值为:如果存在,则返回包含子串的第一个字符所在的索引位置;如果没有找到,则报错

str_a = "1a2a13a14"
result = str_a.index('a13')
print(result)      # 3
# 指定起始位置
result1 = str_a.index('1', 2, 8)
print(result1)     # 4
# 找不到
result2 = str_a.index('123')
print(result2)     # 报错,ValueError: substring not found

rindex():与index()用法相同,不过是从右往左查找

str_a = "1a2a13a14"
result = str_a.rindex('a')
print(result)      # 6
result1 = str_a.rindex('a', 1, 6)
print(result1)     # 3
result2 = str_a.rindex('12')
print(result2)     # 报错,ValueError: substring not found

9:count():统计子字符串在字符串中出现的次数

str.count(str, start, end)

# str:表示要查找的子字符串

# start:表示查找的开始位置,默认为0

# end:表示查找的结束位置,默认为字符串的长度

返回值为:子字符串在字符串中出现的次数,子字符串不存在字符串中,则返回0

str_a = "1a2a13a1413"
result = str_a.count('13')
print(result)      # 2
# 指定查找的起始位置
result1 = str_a.count('1', 5, 8)
print(result1)     # 1

10:strip():移除字符串头尾指定的字符或字符序列

str.strip(str)     # 不填str时,默认移除字符串头尾的空格

# str:移除字符串头尾指定的字符序列

返回值为:移除了字符串头尾指定的字符序列后,生成的新字符串。不修改原字符串。

str_a = "13a2a13a1413"
result = str_a.strip("13")
print(result)    # a2a13a14
str_a1 = " 2356b jbbds "
result1 = str_a1.strip()
print(result1)   # 2356b jbbds

注意:只能删除开头或结尾的字符,不能删除中间部分的字符。

lstrip():移除字符串左边的空格或指定的字符。

str.strip(str)     # 不填str时,默认移除字符串头部的空格

# str:移除字符串头部指定的字符序列

返回值为:移除了字符串头部指定的字符序列后,生成的新字符串。不修改原字符串。

str_a = "13a2a13a1413"
result = str_a.lstrip("13")
print(result)      # a2a13a1413
str_a1 = " 2356b jbbds "
result1 = str_a1.lstrip()
print(result1)     # '2356b jbbds '

rstrip():移除字符串右边的空格或指定的字符。

str.strip(str)     # 不填str时,默认移除字符串部的空格

# str:移除字符串尾部指定的字符序列

返回值为:移除了字符串尾部指定的字符序列后,生成的新字符串。不修改原字符串。

str_a = "13a2a13a1413"
result = str_a.rstrip("13")
print(result)      # 13a2a13a14
str_a1 = " 2356b jbbds "
result1 = str_a1.rstrip()
print(result1)     # ' 2356b jbbds'

11:center():将字符串居中,并用指定的字符填充一个指定的宽度,默认为空格。

str.center(width, fillchar)

# width:字符串的总宽度

# fillchar:填充的字符,默认为空格

返回值为:一个指定的宽度 width 居中的字符串,如果 width 小于字符串宽度直接返回字符串,否则使用 fillchar 去填充。

str_a = "abc"
# 总宽度为20个字符,剩下的默认以空格填充
result = str_a.center(20)
print(result)      # '        abc         '
print(str_a)       # abc
# 总宽度为20个字符,剩下的以*填充
result1 = str_a.center(20, '*')
print(result1)     # ********abc*********

ljust():将字符串左对齐,并使用指定字符去填充至指定宽度。默认以空格填充。

str.ljust(width, fillchar)

# width:字符串的总宽度

# fillchar:填充的字符,默认为空格

返回值为:返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。

str_a = "abc"
result = str_a.ljust(20)
print(result)     # 'abc                 '
print(str_a)      # abc
result1 = str_a.ljust(20, '*')
print(result1)    # abc*****************

rjust():将字符串右对齐,并使用指定字符去填充至指定宽度。默认以空格填充。

str.ljust(width, fillchar)

# width:字符串的总宽度

# fillchar:填充的字符,默认为空格

返回值为:返回一个原字符串右对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。

str_a = "abc"
result = str_a.rjust(20)
print(result)      # '                 abc'
print(str_a)       # abc
result1 = str_a.rjust(20, '*')
print(result1)     # *****************abc

zfill():将字符串右对齐,并使用“0”去填充至指定宽度

str.ljust(width)

# width:字符串的总宽度

返回值为:返回一个原字符串右对齐,并使用“0”填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串。

str_a = "abc"
result = str_a.zfill(20)
print(result)      # 00000000000000000abc
print(str_a)       # abc
result1 = str_a.zfill(2)
print(result1)     # abc

字符串的方法还有很多,其他的方法参考:菜鸟教程字符串

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值