字符串
字符串的表示方式
在python
里,可以使用一对单引号,一对双引号或者一对三个单引号,一对三个上引号
a = 'hello'
b = "good"
c = '''呵呵呵'''
d = """嘿嘿嘿"""
如果字符串里有单引号,外面可以用双引号
e = '小明说:"你好"'
f = "I'm xiaoming"
g = """xiaoming said:"I am xiaoming" """
字符串里的转义字符\
# \' ==>表示一个普通的单引号
h = 'I\'m xiaoming' # \ 表示的是转义字符,作用是对\后面的字符进行转义
# result: I'm xiaoming
# \" ==>表示一个普通的双引号
i = "xiaoming said:\"I am xiaoming\""
# result: xiaoming said:"I am xiaoming"
# \n ==>表示一个换行
j = "hello \n world"
# result:
hello
world
# \t ==>表示一个制表符
k = "你好\t世界"
# result: 你好 世界
# \\ ==>表示一个普通的反斜线
l = "good mor\\ning"
# result: good mor\ning
# 在字符串的前面添加`r`在python里面表示原生的字符串
m = r"hello \teacher"
# result: hello \teacher
下标
下标又称之为索引,表示第几个数字。
str
list
tuple
可以通过下标来获取或者操作数据
在计算机里,下标都是从0开始的。
word='zhangsan'
# 可以通过下标来获取或者修改指定位置的数据
print(word[4])
# result: g
字符串是不可改变的数据类型,对于字符串的任何操作,都不会改变原有的字符串
切片
切片就是从字符串里赋值一段指定的内容,生成一个新的字符串,原字符串的数据不变
切片语法:m[start : end:step],start开始位置,end结束位置的前一位。step步长,可以理解为间隔,step为正数从左往右复制数据,step为负数从右往左复制数据。
m = 'abcdefghijklmnopqistuvwsyz'
# 包含start,不包含end
print(m[2:9])
# result: cdefghi
# 如果只设置了start,会截取到最后
print(m[2:])
# resutl: cdefghijklmnopqistuvwsyz
# 如果只设置了end,会从头开始截取
print(m[:9])
# result: abcdefghi
# 步长默认为1,不能为0为零时报错
print(m[3:15:1])
# resutl: defghijklmno
# 每间隔步长取一次数据
print(m[3:15:2])
# result: dfhjln
# 步长可以是负数,表示从右往左
print(m[15:3:-1])
# result: ponmlkjihgfe
# 从头到尾复制一份
print(m[::])
# result: abcdefghijklmnopqistuvwsyz
# 倒序
print(m[::-1])
# result: zyswvutsiqponmlkjihgfedcba
print(m[-9:-5:])
# result: istu
字符串常见操作
x = 'abcdefghijklmn'
# 获取字符串长度
print(len(x))
# result: 14
# 查找内容相关的方法 find/index/rfind/rindex,可以获取指定字符的下标
print(x.find('l'))
# result: 11
print(x.index('l'))
# result: 11
# 如果字符在字符串里不存在返回-1
print(x.find('p'))
# result: -1
# 使用index,如果字符不存在,会报错
# print(x.index('p'))
# result:
'''
Traceback (most recent call last):
File "c:\\Users\\edz\\Desktop\Demo.py", line 8, in <module>
print(x.index('p'))
ValueError: substring not found
'''
# 从第四个开始查找l,一直查找到第九个,l下标为11,没有查询到返回-1
print(x.find('l',4,9))
# result: -1
# rfind和rindex用法与find和index相同,区别在于他们会查找下标最大的那个
m = 'abcdefghijklmnl'
print(m.rfind('l'))
# result: 14
print(m.rindex('l'))
# result: 14
字符串判断
startswith
,endweith
,isalpha
,isdigit
,isalnum
,isspace
# is开头的是判断,结果是一个布尔类型
# 判断hello,结果是一h开头的字符串
print('hello'.startswith('h'))
# result: True
# 以o结尾
print('hello'.endswith('o'))
# result: True
# 是否只有字母组成
print('he45llo'.isalpha()) # False
# 是否只有数字组成
print('good'.isdigit()) # False
print('123'.isdigit()) # True
print('3.14'.isdigit()) # False
# 是否字母和数字组成
print('abce123'.isalnum()) # True
print('abc'.isalnum()) # True
print('1234'.isalnum()) # True
print('4-1=3'.isalnum()) # False
# 是否全部由空格组成
print(' '.isspace()) # True
print(' sdf sdf '.isspace()) # False
count
返回str
在start
和end
之间在mystr
里面出现的次数
语法格式
mystr.count(sub[,start[,end]])-->int
示例
mystr='今天天气好晴朗,处处好风光呀好风光'
print(mystr.count('好')) # 3
替换
replace
方法
# replace方法:用来替换
word = 'hello'
m =word.replace('l','x') # replace将字符串里的l替换成x
print(word) # hello 字符串是不可变数据类型
print(m) # hexxo 原来的字符串不会改变,而生成一个新的字符串来保存替换后的结果
内容分割
aplit
,rsplit
,splitlines
,partition
,rpartition
使用split
方法,以 str
为分隔符切片 string
,如果 num
有指定值,则仅分隔 num+1
个子字符串
print(x.split(',')) # ['zhangsan', 'lisi', 'wangwu', 'jerry', 'henry', 'merry', 'jack', 'tony']
print(x.split(',', 2)) # ['zhangsan', 'lisi', 'wangwu,jerry,henry,merry,jack,tony']
# rsplit方法,从右边开始分割
print(x.rsplit(',', 2)) # ['zhangsan,lisi,wangwu,jerry,henry,merry', 'jack', 'tony']
# 将列表转换为字符串。join方法后面是可迭代对象
fruits=['apple','pear','peach','banana','orange','grape']
print('-'.join(fruits)) # apple-pear-peach-banana-orange-grape
print('*'.join('Hello')) # H*e*l*l*o
splitlines
方法,按照行分割,返回一个包含各行作为元素的列表
x='hello\nworld'
print(x.splitlines()) # ['hello', 'world']
partition
方法,把mystr
以str
分割成三部分,str
前,str
和str
后,三部分组成一个元祖
print('abceefgHijklmn'.partition('H')) # ('abceefg', 'H', 'ijklmn')
print('abceefgHijkHlmn'.rpartition('H')) # ('abceefgHijk', 'H', 'lmn')
# 例如想要获取文件的文件名称和后缀名
file_name='2020.02.21拍摄的视频.mp4'
print(file_name.rpartition('.')) # ('2020.02.21拍摄的视频', '.', 'mp4')
修改大小写
# capitalize 让第一个单词首字母大写
print('hello world '.capitalize()) # Hello world
# title 每个单词的首字母大写
print('good morning'.title()) # Good Morning
# upper 字符串全部改为大写
print('hello world'.upper()) # HELLO WORLD
# lower 字符串全部改为小写
print('HELLO World'.lower()) # hello world
填充补齐
# 让字符串以指定的长度显示,如果长度不够,默认在右边使用空格补齐
print('Hello'.ljust(10),'World',sep='') # Hello World
print('Hello'.ljust(10,'x'),'World',sep='') # HelloxxxxxWorld
# 左侧补齐
print('Tuesday'.rjust(12, '*')) # *****Tuesday
# 字符串在中间,两侧补齐长度
print('apple'.center(20,'*')) # *******apple********
去除空格
# 去除左边空的
print(' Hello '.lstrip(),'World',sep='') # Hello World
# 去除右边空格
print(' Hello '.rstrip(),'World',sep='') # HelloWorld
# 去除两边的空格
print(' Hello World '.strip(),'123',sep='') # Hello World123
# 去除所有的空格
print(' Hello World '.replace(' ', '')) # HelloWorld
字符串运算
- 字符串和字符串之间可以使用加法运算,作用是拼接两个字符串
- 字符串和数字之间可以使用乘法运算,目的是将指定的字符串重复多次
- 字符串和数字之间做
==
运算结果是False
,做!=
运算结果是True
- 字符串之间做比较运算,会逐个比较字符串的编码值
- 不支持其他的运算符
字符编码
# ord获取字符对应的编码
print(ord('a')) # 97 字符a对应的编码是97
print(ord('你')) # 20320
# chr 根据编码获取对应的字符
print(chr(65)) # A 数字65对应大写字母A
# 字符串转变称为指定的编码集
print('你'.encode('gbk')) # b'\xc4\xe3' 50195
成员运算符
in
和not in
运算法
# 判断一个内容在可迭代对象里是否存在
word='hello'
x=input('请输入一个字符:')
if x in word:
print('您输入的内容存在')
else:
print('您输入的内容不存在')
if x not in word:
print('不存在')
else:
print('存在')
格式化打印字符串
name = 'zhangsan'
age=18
print('大家好,我的名字是',name,'我今年',age,'岁了',sep='') # 大家好,我的名字是zhangsan我今年18岁了
在字符串里可以使用 %
占位符
%s
==> 表示字符串的占位符%d
==> 表示整数的占位符%nd
==> 打印时显示n
位,如果不够在前面使用空格补齐%f
==> 表示浮点数的占位符%.nf
==> 保留小数点后n位%x
==> 将数字使用十六进制输出%%
==> 输出一个%
print('大家好,我的名字是%s,我今年%d岁了,我今天挣了%f元钱,我的第一编号是%3d号,我的第二个编号是%03d号'%(name,age,3.14,5,6))
# 大家好,我的名字是zhangsan,我今年18岁了,我今天挣了3.140000元钱,我的第一编号是 5号,我的第二个编号是006号
print('大家好,我是%3d号男嘉宾'%15) # 大家好,我是 15号男嘉宾
print('大家好,我是%-3d号男嘉宾'%15) # 大家好,我是15 号男嘉宾
print('大家好,我是%03d号男嘉宾'%15) # 大家好,我是015号男嘉宾
print('我今天挣了%.2f元钱' % 3.1415926) # 我今天挣了3.14元钱
字符串的format方法
# {}可以进行占位符,{}什么都不写,会读取后面的内容一一对应填充
print('大家好,我是{},我今年{}岁了'.format('张三', 18))
# 大家好,我是张三,我今年18岁了
# {数字}根据数字的顺序来进行填入,数字从0开始
print('大家好,我是{1},我今年{0}岁了'.format(18, '张三'))
# 大家好,我是张三,我今年18岁了
# {变量名}
print('大家好,我是{name},我今年{age}岁了,我来自{addr}'.format(age=18, name='张三', addr='山东'))
# 大家好,我是张三,我今年18岁了,我来自山东
# 混合使用 {数字} {变量},变量写到最后
print('大家好,我是{name},我今年{1}岁了,我来自{0}'.format('泰国', 23, name='张三'))
# 大家好,我是张三,我今年23岁了,我来自泰国
# {} {数字} 这种形式不能混合使用
# 列表使用
d = ['张三', 18, '上海', 180]
print('大家好,我是{},我今年{}岁了,我来自{},我是身高{}cm'.format(*d))
# 大家好,我是张三,我今年18岁了,我来自上海,我是身高180cm
# 字典
info = {'name': 'chris', 'age': 23, 'addr': '北京', 'height': 180}
print('大家好,我是{name},我今年{age}岁了,我来自{addr},我是身高{height}cm'.format(**info))
# 大家好,我是chris,我今年23岁了,我来自北京,我是身高180cm