字符串
它是Python中最常用的数据类型之一,通常使用单引号或双引号来创建字符串。
注意:
- 单引号或双引号必须成对出现;
- 程序中会优先寻找最近的单引号或双引号;
- 当成对出现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;
例如:
"""需求:拿到一段值,通过切片进行取值,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呀") # 取消换行