[Python学习日记-17] 细讲数据类型——字符串
简介
字符串在编程当中非常常用,例如在登陆功能中,用户输入的用户名、密码、验证码等都是使用字符串的形式来存储的,在 Python 中,字符串是一种表示文本数据的数据类型。字符串可以是由任意字符组成的,用单引号或双引号括起来即可。
定义:字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,' ' 或 " " 中间包含的内容称之为字符串
字符串的特点:
1.Python 中的字符串是一种有序的,按照从左到右的顺序定义字符集合,下标从0开始顺序访问
2.可以进行切片操作
3.Python 中的字符串是不可变的,不能像列表一样修改其中某个元素,所有对字符串的修改操作其实都是相当于生成了一份新数据
注意:
字符串的单引号和双引号都无法取消特殊字符的含义,如果想让引号内所有字符均取消特殊意义,在引号前面加 r,如 name = r'i\thf',如果不加 r 在引号前面特殊字符将会被转译
除了在引号前面加 r 外还有一个方法是可以消除特殊字符转译的,那就是在特殊字符前加“\”,其实在引号前面加 r 也是执行了同样的操作,只不过是 Python 帮你自动加上了
字符串的增查改
一、增
str = "Hello,Jove! How are you?"
代码输出如下:
二、查
字符串其实也可以把它理解为一个列表或者时元组,因为他们身上相似的地方套多了,例如它们都可以通过下标查找,也可以进行切片
str = "Jove"
# 普通查询
print(str)
print(str[0],str[1],str[2],str[3])
print(str[-4],str[-3],str[-2],str[-1])
# 切片,与列表相同同样是顾头不顾尾
print(str[0:3])
print(str[-4:-1])
# 步长
print(str[0:3:2])
print(str[-4:-1:3])
print(str[::-1])
# 除以上的方法外还有 find(),index(),count()... 详细请看字符串的常用操作小节
代码输出如下:
三、改
从查当中可以看出,字符串和列表一样是可以每个字符每个字符这样查找的,不过对于字符串的修改却不能逐个字符这样修改,它可以整个字符串进行修改或者先对字符串进行切片,然后插入需要修改的字符,最后进行拼接
# 整个进行修改
str = "Jove"
print(id(str),str)
str = "Kerry"
print(id(str),str)
# 结合切片和拼接进行修改特定字符
# 例如需要把 Jove 中的 o 修改为a
str = "Jove"
print(id(str),str)
str1 = str[0]
str2 = str[2:]
str = str1 + "a" + str2
print(id(str),str)
# 除以上的方法外还有 replace(),upper(),lower(),swapcase(),casefold(),strip(),split()... 详细请看字符串的常用操作小节
代码输出如下:
从现象可以看出,无论是通过整体的修改或者是切片再拼接的方法进行修改都是会从新生成一个新的内存地址
字符串的常用方法
字符串操作方法有非常多,但是并不是所有都会用到,本篇就只讲一些重要的方法,至于其他方法如果有兴趣的话可以使用 help(str) 来研究研究
一、 首字母大写
s = "hello world"
print(s.capitalize())
代码输出如下:
二、字母全小写
s = "HELLO,WORLD"
print(s.casefold())
代码输出如下:
三、 长度填充
s = "hello,world"
print(s.center(50, '-')) # 总长度,填充字符
代码输出如下:
四、统计指定字符数量
s = "hello,world"
print(s.count('o', 2, 5)) # 查找字符,开始标号,结束标号;顾头不顾尾
代码输出如下:
五、字符串编码
目前还没讲到编码,后续学习到编码会再讲
s = "hello,world"
print(s.encode('utf-8')) # 字符串 s 进行 utf-8 编码
代码输出如下:
六、判断结尾
s = "hello,world"
print(s.endswith('WORLD'))
print(s.endswith('world'))
代码输出如下:
七、在字符串中查找字符
s = "hello,world"
# 有则返回下标,无则返回-1,与 index() 相同,但 index() 无则报错
print(s.find('o'))
# 查找字符,开始标号,结束标号;顾头不顾尾
print(s.find('O', 5, 9))
print(s.index('o', 5, 9))
print(s.index('O', 5, 9))
代码输出如下:
八、代位
s = "Welcome %s to Apeland,you are No.%s user." % ("Jack", 888)
print(s)
s = "Welcome {0} to Apeland,you are No.{1} user,{0}hahaha."
print(s.format("Eva", 999))
name = "Lucy"
number = 777
s = "Welcome {name} to Apeland,you are No.{number} user."
print(s.format(name=name, number=number))
代码输出如下:
九、代位(使用字典)
目前还没讲到字典,后续学习到字典会再讲
mapping = {"name":"Lucy","number":"777"}
s = "Welcome {name} to Apeland,you are No.{number} user."
print(s.format_map(mapping))
代码输出如下:
十、判断字符串是否整数
# 可用于数据类型转换前的判断
student_num = "32"
print(student_num.isdigit())
if student_num:
num = int(student_num)
print(num, type(num))
代码输出如下:
十一、判断字符串当中是否全是小写
lower = "abcdefg"
print(lower, lower.islower())
lower += "G"
print(lower, lower.islower())
代码输出如下:
十二、字符串是否为空格
print("\033[42;1m \033[0m", " ".isspace())
代码输出如下:
十三、拼接字符串
n = ['1', '2', '3', '4', '5']
print(" ".join(n)) # 列表中的元素必须是字符串,否则无法拼接
代码输出如下:
十四、从左边开始数填充字符串长度(填充在右边)
lower = "abcdefg"
print(lower.ljust(50, "*")) # 从左开始数,不够的位数填充 *
代码输出如下:
十五、从右边开始数填充字符串长度(填充在左边)
lower = "abcdefg"
print(lower.rjust(50, "*")) # 从右开始数,不够的位数填充 *
代码输出如下:
十六、把字符串当中的大写都转成小写
s = "HELLO,WORLD"
print(s.lower())
代码输出如下:
十七、把除字符外的其他功能性的特殊字符去掉
ss = " \thello,\nwo rld \n "
print(ss.strip()) # 但在字符串中的空格与特殊字符无法去除
print(ss.lstrip()) # lstrip()只把左边除字符外的其他功能性的特殊字符去掉
print(ss.rstrip()) # rstrip()只把右边除字符外的其他功能性的特殊字符去掉
代码输出如下:
十八、批量修改指定字符
# 默认所有指定的字符都进行修改,但也可以规定只改几次
my_score = "My score is 580,not very good.Of coure,mu honey score as 580,too."
print(my_score.replace("580", "650", 1)) # 从左到右数改1次
print(my_score.replace("580", "650")) # 全都改
代码输出如下:
十九、把字符串转换为列表
# 默认会以空格作为分割符
apple = ["iPhone", "iPad", "iPad Pro", "iPod", "iWatch", "iPhone"]
apple2 = ",".join(apple)
print(apple2)
print(apple2.split()) # 默认为空格
print(apple2.split(","))
代码输出如下:
二十、按次数分割字符串为列表
apple2 = 'iPhone,iPad,iPad Pro,iPod,iWatch,iPhone'
# 从0开始数起,也可以说是列表的长度
print(apple2.split(",", 2)) # 分割符号,分割几次
print(apple2.rsplit(",", 1)) # 分割符号,分割几次,从右边的分隔符开始分
代码输出如下:
二十一、判断字符串开头字符
apple2 = 'iPhone,iPad,iPad Pro,iPod,iWatch,iPhone'
print(apple2.startswith("i"))
print(apple2.startswith("i", 1)) # 从字符串标号为1的字符开始
代码输出如下:
二十二、大小写对换
apple2 = 'iPhone,iPad,iPad Pro,iPod,iWatch,iPhone'
print(apple2.swapcase())
代码输出如下:
二十三、把字符串全变成大写
s = "hello,world"
print(s.upper())
代码输出如下:
二十四、用0填充在字符串的左边
s = "hello,world"
print(s.zfill(100))
代码输出如下: