前言
字符串是一串字符,表示文本的数据类型,使用一双双引号或一双单引号括起来表示。
字符串的定义和取值
字符串通过下标取值,下标也是从0开始。
str1 = "Hello world"
str2 = "我叫刘大彪"
print(str1[6])
print(str2[4])
结果
w
彪
字符串遍历和统计
for char in str1:
print(char)
print(len(str2)) # 获取长度方法
print(str1.count("l")) # 获取l字母在hello world里共出现几次
print(str1.index("l")) # 获取l字母在hello world里第一次出现的下标
H
e
l
l
o
w
o
r
l
d
5
3
2
字符串中空字符和数字判断
# 空白字符\t输出制表符协助文本垂直方向对齐 \n输出换行符 \r输出回车
# 判断是否有空白字符的方法
str_sp = "你好 世界\t 你好\n 二狗\r"
str_sp1 = " \t \n \r"
print(str_sp.isspace()) # 如果S中的所有字符都是空格且S中至少有一个字符,则返回True,否则返回False。
print(str_sp1.isspace())
# 判断字符串中是否包含数字
str_num1 = "1"
str_num2 = "1.1"
str_num3 = "\u00b2"
str_num4 = "一千零一"
print(str_num1+"isdecimal%s " % str_num1.isdecimal()) # 只能判断是否为单纯数字
print(str_num2+"isdecimal%s " % str_num2.isdecimal()) # 都不能判断小数
print(str_num3+"isdecimal%s " % str_num3.isdecimal())
print(str_num4+"isdecimal%s " % str_num4.isdecimal())
print(str_num1+"isdigit%s " % str_num1.isdigit()) # 判断为数字,还可判断unicode字符里的数学字符
print(str_num2+"isdigit%s " % str_num2.isdigit()) # 都不能判断小数
print(str_num3+"isdigit%s " % str_num3.isdigit())
print(str_num4+"isdigit%s " % str_num4.isdigit())
print(str_num1+"isnumeric%s " % str_num1.isnumeric()) # 判断数字,可判断unicode字符,还可以判断中文数字
print(str_num2+"isnumeric%s " % str_num2.isnumeric()) # 都不能判断小数
print(str_num3+"isnumeric%s " % str_num3.isnumeric())
print(str_num4+"isnumeric%s " % str_num4.isnumeric())
结果
False
True
1isdecimalTrue
1.1isdecimalFalse
²isdecimalFalse
一千零一isdecimalFalse
1isdigitTrue
1.1isdigitFalse
²isdigitTrue
一千零一isdigitFalse
1isnumericTrue
1.1isnumericFalse
²isnumericTrue
一千零一isnumericTrue
字符串查找和替换
name = "heyri"
print("name是否以hey开始%s " % name.startswith("hey")) # 以hey开始则返回True
print("name是否以ri结束%s " % name.endswith("ri"))
print("name是否有y字符%s " % name.find("y")) # 返回2表示有此字符
print("name是否有y字符%s " % name.find("s")) # 返回-1表示没有此字符,若需要从右到左查找则使用rfind方法
print(name)
print("name被替换成%s" % name.replace("hey", "ha")) # 只临时被替换,本身变量没有被替换
print(name)
结果
name是否以hey开始True
name是否以ri结束True
name是否有y字符2
name是否有y字符-1
heyri
name被替换成hari
heyri
字符串的格式化操作
pom = ["登鹳雀楼",
"王之涣",
"白日依山尽",
"黄河入海流",
"欲穷千里目",
"更上一层楼"]
for pom_str in pom:
print("|%s|" % pom_str.center(10, " ")) # 居左对齐ljust(10) 居右对齐rjust(10) 居中对齐center(10)
pom2 = ["登鹳雀楼\t",
"王之涣\r",
"白日依山尽\n",
" 黄河入海流 ",
"欲穷千里目 ",
"更上一层楼 "]
for pom_str in pom2:
print(pom_str) # 未格式化前的输出不规整
for pom_str in pom2:
# 先去除空格
print("|%s|" % pom_str.strip().center(10, " ")) # strip只能去除前后字符的空格,中间字符无法去除
pom_str1 = "登鹳雀楼\t王之涣\t白日依山尽\n \r黄河入海流 欲穷千里目 更上一层楼 "
print("str=%s" % pom_str1)
# 拆分字符串,去掉空格
pom_list = pom_str1.split()
print(pom_list)
# 合并字符串
pom_result = " ".join(pom_list)
print(pom_result)
结果
| 登鹳雀楼 |
| 王之涣 |
| 白日依山尽 |
| 黄河入海流 |
| 欲穷千里目 |
| 更上一层楼 |
登鹳雀楼
王之涣
白日依山尽
黄河入海流
欲穷千里目
更上一层楼
| 登鹳雀楼 |
| 王之涣 |
| 白日依山尽 |
| 黄河入海流 |
| 欲穷千里目 |
| 更上一层楼 |
str=登鹳雀楼 王之涣 白日依山尽
黄河入海流 欲穷千里目 更上一层楼
['登鹳雀楼', '王之涣', '白日依山尽', '黄河入海流', '欲穷千里目', '更上一层楼']
登鹳雀楼 王之涣 白日依山尽 黄河入海流 欲穷千里目 更上一层楼
字符串的切片
num_str = "0123456789"
print(num_str)
print("[2:6]表示从下标为2开始截取到下标为6不包括6的字符%s" % num_str[2:6])
print("[2:]表示从下标为2开始截取到末尾的字符%s" % num_str[2:])
print("[0:6]表示从下标为0开始截取到下标为6不包括6的字符%s" % num_str[0:6])
print("[:6]表示从最开始截取到下标为6不包括6的字符%s" % num_str[:6])
print("[:]表示截取全部%s" % num_str[:])
print("[::2]表示从头开始截取到最后,但每隔一个字符%s" % num_str[::2])
print("[1::2]表示从下标为1开始截取到最后,但每隔一个字符%s" % num_str[1::2])
print("[-1]表示取最后一个字符%s" % num_str[-1])
print("[2:-1]表示从下标为2开始截取到最后一个,但不包括最后一个(最后一个下标为-1)%s" % num_str[2:-1])
print("[-2:]表示从下标为-2开始截取到最后%s" % num_str[-2:])
print("[0::-1]表示从下标为0开始向左切片%s" % num_str[0::-1])
print("[-1::-1]表示逆序%s" % num_str[-1::-1])
print("[::-1]表示逆序%s" % num_str[::-1])
结果
0123456789
[2:6]表示从下标为2开始截取到下标为6不包括6的字符2345
[2:]表示从下标为2开始截取到末尾的字符23456789
[0:6]表示从下标为0开始截取到下标为6不包括6的字符012345
[:6]表示从最开始截取到下标为6不包括6的字符012345
[:]表示截取全部0123456789
[::2]表示从头开始截取到最后,但每隔一个字符02468
[1::2]表示从下标为1开始截取到最后,但每隔一个字符13579
[-1]表示取最后一个字符9
[2:-1]表示从下标为2开始截取到最后一个,但不包括最后一个(最后一个下标为-1)2345678
[-2:]表示从下标为-2开始截取到最后89
[0::-1]表示从下标为0开始向左切片0
[-1::-1]表示从最后一个字符向左切片,则得到逆序9876543210
[::-1]表示逆序9876543210