【Python】字符串的常见操作

294 阅读8分钟

字符串

它是Python中最常用的数据类型之一,通常使用单引号或双引号来创建字符串。

注意:

  1. 单引号或双引号必须成对出现;
  2. 程序中会优先寻找最近的单引号或双引号;
  3. 当成对出现3个引号时,为注释,不改变原有的样式;

例如:

var_1 = 'hello and python and hello world'

var_2 = “hello world”

var_3 = ""'挖呀挖呀挖'""

字符串的输出,print()

格式化输出:

占位符%:顾名思义,占个位置,相当于先挖个坑,然后用别的值来填充

%s,格式化输出字符串

%f,格式化输出浮点数,默认打印6位小数
%.1f,格式化输出带1位小数点的值,满6进1,非四舍五入,与版本有关
%.2f,格式化输出带2位小数点的值
%.8f,格式化输出带8位小数点的值

%d,格式化输出整数,即:十进制

%o,格式化输出8进制

%x,格式化输出16进制

format():字符串格式化函数

实例:

# 使用 % 占位符,格式化输出
e = """-----------log-----------
name:%s
gender:%s
-----------end-----------"""
name = input("name:")
gender = input("gender:")
print(e % (name, gender))

print("我是%s,今年%d岁。" % ('maria', 18))   # 挖坑,填坑
# 使用format()格式化输出字符串
name1 = input("name:")
gender1 = input("gender:")
print("{}{}".format(name1, gender1))
name3 = '小明'
age3 = 18
hobby3 = '羽毛球'

# 不带索引值
print("大家好,我是{},今年{}岁,我喜欢{}".format(name3, age3, hobby3))

# 带索引值
print("大家晚上好,我是{2},今年{0}岁,我喜欢{1}".format(name3, age3, hobby3))

#  附带关键字
print("明天疯狂星期四,我是{name3},今年{age3}岁,喜欢{love3}".format(name3=name3, age3=age3, love3=hobby3))
# 使用 f 表达式,格式化输出字符串

name2 = input("name:")
gender2 = input("gender:")
print(f"{name2}{gender2}")  # python 3.6以后才出现的
小拓展:常见的转义符号:
'这里是内容',取消编译
"这里是内容",取消编译

\n,换行

\t,制表符,代表4个空格;
作用:对齐表格数据的各列,在不使用表格时可以上下对齐

字符串的输入,input()

name2 = input("name:")
gender2 = input("gender:")

访问字符串中的值

下标(索引),类似于编号,方便查找;注意:索引值是从0开始计算的。

var1 = "hello python"
print(var1[1])    # e
print(var1[2])    # l
print(var1[4])    # o

字符串中的切片

切片:是对操作的对象,截取其中一部分的操作;

字符串、列表、元组,均支持切片操作。

特点:
  1. 不包含结束位置下标对应的数据,正负整数均可;
  2. 步长是选取间隔,正负整数均可,默认步长为1;
例如:
"""需求:拿到一段值,通过切片进行取值,a[起始值索引:终止值索引:步长]"""
"""
步长默认为1
终止值索引:左闭右开
起始值索引:默认为0,可以更改
"""

a = 'hellopython'

print(a[5:11])          # python
print(a[5:11:2])        # pto
print(a[::])            # 默认从头开始,步长默认为1  hellopython
print(a[::-1])          # 没有规定起始值和终止值,步长为-1,nohtypolleh
print(a[:18:])          # 超过字符串的长度时,也是可以的,  hellopython
print(a[:8:])           # hellopyt
print(a[-1:-12:-1])     # 从右往左,步长为-1,nnohtypolleh
print(a[-1:-12:3])      # 从右往左,步长为3,方向不一致,取不到值

"""当取值的方向和步长的方向不一致时,取不到值"""
print(a[0:10:-1])       # 取不到值

字符串中常用的操作方法:

Python3.0 之后的字符串的操作方法有:string替换、复制、连接、比较、查找、大小写转换、分隔、判断等。

查找:

查找子串在字符串中的位置或出现的次数;

find():

检测某个字符串是否包含在这个字符串中,若存在则返回这个字符串开始位置的下标,否则返回-1。

语法:字符串序列.find(子串,开始位置下标,结束位置下标)

var_1 = 'hello and python and hello world'

print(var_1.find("and"))         # 查找到and首字母的下标,6
print(var_1.find("and", 8, 20))  # 查找到下标为8-20,and的首字母下标,17
print(var_1.find("ddgwdg"))  # 查找ddgwdg,没有找到,返回-1
index():

检测某个子串是否包含在这个字符串中,若存在则返回这个字符串开始位置的下标,否则报异常。

语法:字符串序列.index(子串,开始位置下标,结束位置下标)

var_2 = 'hello and python and hello world and how are you'

print(var_2.index("and"))         # 查找到and首字母的下标,6
print(var_2.index("and", 8, 20))  # 查找到下标为8-20,and的首字母下标,17
# print(var_2.index("ddgwdg"))    # 查找ddgwdg,没有找到,则报错
count():

返回某个子串在字符串中出现的次数

语法:字符串序列.count(子串,开始位置下标,结束位置下标)

li_1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, [1, 2, 3, 4, 5, 6, 7]]

print(li_1.count(1))      # 查找数字1出现的次数:1次
print(li_1[-1].count(1))  # 从最右边开始查找,这个序列中1出现的次数
print(li_1[-1].count(10))  # 从最右边开始查找,如果没有找到,则出现0次
var = "hello and python and hello world"

print(var.count("and"))  # 查看在字符串var中,and出现了多少次
print(var.count("ands"))  # 如果没有,则返回0次
print(var.count("and", 8, 20))  # 在一个区间内查找and出现的次数

拓展(了解即可):

var = "hello and python and hello world"

# rfind(): 和find()功能相同,但查找⽅向为右侧开始。
print(var.rfind("and"))

# rindex():和index()功能相同,但查找⽅向为右侧开始。
print(var.rindex("and"))

修改,replace():

对字符串中的内容进行修改。

语法:字符串序列.replace(旧子串,新子串,替换次数)

注意:替换前后,内存地址发生改变,即:字符串为不可变数据类型。

var_3 = 'hello and python and hello world and how are you'

print(id(var_3))  # 4340403760

var_4 = var_3.replace("and", "or", 1)

print(id(var_4))  # 4341400272
print(var_3.replace("and", "or", 2))  # 指定替换次数,从左往右开始,替换2次
print(var_3.replace("and", "or", 1))  # 指定替换次数,从左往右开始,替换一次
print(var_3.replace("and", "or", -1))  # 指定替换次数,从右往左开始,替换全部
print(var_3.replace("and", "or"))  # 默认替换所有

分割,split():

按照指定字符分割字符串

语法:字符串序列.split(分割字符,分割字符出现的最大次数)

var_4 = 'you and me, me and you, we are family'

print(var_4.split("and"))  # 以and为界,分隔开其他字符,返回一个列表 ['you ', ' me, me ', ' you, we are family']
print(var_4.split("and", 1))  # 以and为界,分隔开其他字符,返回一个列表 ['you ', ' me, me and you, we are family']
print(var_4.split("and", 8))  # 以and为界,分隔开其他字符,要求分隔8次时,只能分隔已有的最大值,返回一个列表 ['you ', ' me, me and you, we are family']
print(var_4.split(" "))  # 以空格为界,分隔开其他字符,返回一个列表 ['you', 'and', 'me,', 'me', 'and', 'you,', 'we', 'are', 'family']
print(var_4.split('|'))  # 字符串中没有这个竖线:['you and me, me and you, we are family']

连接,join():

在原有的字符串中加入指定内容,即将多个字符串合并为一个新的字符串。

语法:‘字符或子串’.join(多字符串组成的序列)

a = '123456789'
print('++'.join(a))  # iterable可迭代对象:能够从一个序列中逐个取出数据的,能够使用循环遍历的就肯定是一个可迭代对象

list_1 = ["1", "3", "4", "7"]
print("_".join(list_1))  # 1_3_4_7

# list_2 = [1, 2, 3, 35, 6, 0]
# print("....".join(list_2))  # 报错:因为join()属于字符串的方法,int类型不可用

list_2 = ["you", "and", "me"]
tuple_1 = ("how", "are", "you")
set_1 = {"what", "is", "your", "name"}

print("——".join(list_2))  # 将列表转化为字符串,并且使用指定符号隔开
print("。".join(tuple_1))  # 将元组转化为字符串,并且使用指定符号隔开
print("/".join(set_1))  # 将集合转化为字符串,并且使用指定符号隔开,无序不重复  what/name/your/is

删除:

lstrip():删除字符串左侧空白字符
rstrip():删除字符串右侧空白字符
strip():删除字符串两侧空白字符
var_5 = " && hello world, I am maria &&   "
print(var_5.strip())  # 删除两侧空格,&& hello world, I am maria &&

判断:

isalpha():

如果字符串中所有字符都是字母,则返回True,否则返回False。

str_1 = '12345'
str_2 = 'hello12345'
str_3 = 'hello'

print(str_1.isalpha())   # False
print(str_2.isalpha())   # False
print(str_3.isalpha())   # True

isdigit(): 如果字符串中只包含数字,则返回True,否则返回False。

print(str_1.isdigit())  # True
print(str_2.isdigit())  # False

isalnum():如果字符串所有字符都是字母或数字,则返回True,否则返回False。

str_1 = '12345'
str_2 = 'hello12345'
str_4 = 'hello_'

print(str_1.isalnum())  # True
print(str_2.isalnum())  # True
print(str_4.isalnum())  # False

isspace():如果字符串中只包含空白,则返回True,否则返回False。

str_5 = '1 3 4 5 6 7'
str_6 = '   '

print(str_5.isspace())  # False
print(str_6.isspace())  # True

其他方法:

startswith():检查字符串是否是以指定子串开头

var = 'hello python and hello world'

print(var.startswith('hello'))   # True
print(var.startswith('and'))     # False

endswith():检查字符串是否是以指定子串结尾

print(var.endswith('world'))     # True
print(var.endswith('hello'))     # False

capitalize():将字符串第一个字符转换为大写。

print(var.capitalize())  # Hello python and hello world

title():将字符串每个单词首字母转换为大写。

print(var.title())  # Hello Python And Hello World

upper():将字符串中的小写转大写

print(var.upper())  # HELLO PYTHON AND HELLO WORLD

lower():将字符串中的大写转为小写。

l么 just():返回一个原字符串左对齐,并使用指定字符填充至对应长度的新字符串。(默认空格)

ljust():返回一个原字符串左对齐,并使用指定字符填充至对应长度的新字符串。(默认空格)

center():返回一个原字符串居中,并使用指定字符填充至对应长度的新字符串。(默认空格)

字符串的运算:

字符串连接: +

[] 通过索引,获取字符串中的字符

[:] 截取字符串中的一部分

in 成员运算符,如果字符串中包含指定的字符,返回True

not in 成员运算符,如果字符串中不包含指定的字符,返回True

r 取消转义

% 格式化字符串,占位符

"""转义"""

print("侬好呀")
print("侬好\n呀")  # 换行
print(r"侬好\n呀")  # 取消换行