字符串的表示方式
在 Python里,可以使用一对单引号,一对双引号或者一对三个双引号、一对三个单引号,来表示字符串。
a = 'hello'
b = "good"
c = """呵呵呵"""
d = '''嘿嘿嘿'''
字符串里的转义字符
简单说就是使用"\
“让输出显示”\
"后的有特殊含义的的字符
显示一个普通的单引号
x = 'I\'m xiaoming'
显示一个双引号
y = "xiaoming said:"'\"I am xiaoming\"'
显示一个反斜杠
x2 = 'good mor\\ning'
字符串的下标和切片
下标又称为索引,表示第几个数据。在计算机里,下标都是从0开始的,也就是说第一个数的下标是0。
在Python里,可以通过下标来获取或者修改指定位置的数据。字符串是不可变数据类型,对字符串的任何操作,都不会改变原有的字符串。
word = 'zhangsan'
print(word[4]) #输出结果g
切片就是从字符串里复制一段指定内容,生成一个新的字符串
切片语法:
变量[start:end:step
]
start:开始的下标
end:结束的下标,但是不包含这个值。
step:步长,简单理解就是间隔。
m = 'abcdefghijklmnopqrstuvwxyz'
print(m[2:9:2])
如果只设置了start,会"截取"到最后
print(m[2:])
如果只设置了 end,会从头开始“截取”
print(m[:8])
如果步长设置为负数,会倒序复制
print(m[::-1])
如果start和end都是负数,表示从右往左复制。
print(m[-9:-5])
查找相关的方法
使用内置函数 len 可以获取字符串的长度
x = 'abcdefghijklmnabcdefghijklmn'
print(len(x))
查找内容的相关方法:通过 find/index/rfind/rindex 可以获取指定字符的下标
find 和 index 都可以获取指定字符串的位置。但是find如果字符在字符串里不存在,结果是-1;index如果字符在字符串里不存在会报错。
print(x.find('l'))
print(x.index('l'))
rfind最大索引,字符出现的最后位置的下标,不存在结果结果是 -1
rfindex最大索引,不存在会报错。
print(x.rfind('l'))
print(x.rfindex('l'))
字符串查找判断和替换
startswith,endswith,isalpha,isdigit,isalnum,isspace;以is开头的是判断,结果是一个布尔类型。
startswith:判断字符串是什么字母开头
endswith:判断字符串是什么结尾
isalpha:判断是否是字母
print('hello'.startswith('he'))
print('hello'.endswith('o'))
print('hello'.isalpha())
isdigit:判断是否是数字
isalnum:判断是否是数字和字母组成,单独数字或字母都是True
print('ab12hello'.isalnum())
print('hello'.isalnum())
print('1234'.isalnum())
替换
replace方法:用来替换字符串
注意:字符串是不可变数据类型,不可修改,此处的替换是原来的字符串不会变,而是生成一个新的字符串来保存替换后的结果。
word = 'hello'
word.replace('l','x') #replace 将字符串里的 L 替换成 x
m = word.replace('l','x')
print(word) # hello
print(m)
字符串分隔方法
内容分隔主要涉及到 split,rsplit,splitlines,partition,和 rpartition 四个方法
split方法:可以将一个字符串切割成一个列表
x = 'zhangsan-lisi-wangwu-jerry-henry-merry-jack'
y = x.split('-')
rsplit方法:切割后的结果和split结果一样。如果设置最大分隔次数,两者分隔方式不同;split从左边分,前几个分隔,之后的不在分隔;rsplit从右边开始分,右边分几个个,之前的不在分隔。
print(x.split('-',2)) # 2 表示最大分隔次数,从左边分,前两个分隔,之后的不在分隔
print(x.rsplit('-',2)) #从右边开始分,右边分两个,之前的不在分隔
splitlines 表示换行分隔
按照行分隔,返回一个包含各行作为元素的列表
partition 指定一个字符串作为分隔符,分为三部分
前面 分隔符 后面
修改字符串大小写
capitalize:让第一个单词的首字母大写
print('hello word.good morning\nyes'.capitalize())
upper:全大写
print('hello'upper())
lower:全小写
print('HELLO'lower())
title:每个单词首字母大写
print('good morning'title())
位置设置
ljust(width,fillchar) 居左
rjust 居右 在左侧补空格
center 居中 两侧加空格
width 长度 fillchar 填充字符,默认是空格;可以自己设置
让字符串以指定长度显示,如果长度不够,默认在右边使用空格补齐
print('Monday'.ljust(10))
print('Monday'.ljust(10,'+'))
lstrip 去掉左边的空格
rstrip 去掉右边的空格
strip 去掉左右两边的空格
print(' apple '.lstrip())
print(' apple '.rstrip())
print(' apple '.strip())
以某种固定格式显示的字符串,split可以将它切割成为一个列表
join可以将列表转换成为字符串
x = 'zhangsan+lisi+wangwu+jack+tony+henry+chris'
names = x.split('+')
print(names)
字符串的运算符
字符串和字符串之间可以使用加法运算,作用是拼接两个字符串
字符串和数字之间可以使用乘法运算,目的是将指定的字符串重复多次
字符串和数字之间做 == 运算结果是Flase,做 != 运算,结果是True
字符串之间做比较运算,会逐个比较字符串的编码值
不支持其他的运算符
字符串的编码
使用内置函数 chr 和 ord 能够查看数字和字符的对应关系
ord 可以获取字符对应的编码;chr 可以根据编码获取对应的字符
encode 方法,可以将字符串转换成为指定编码结果
decode可以将一个编码集转换成为对应的字符
print(ord('a'))
print(chr(65))
print('你'.encode('gbk'))
print('你'.encode('utf8'))
x = b'\xe4]xbd\xa0'
print(x.decode('utf8'))
成员运算符
in和not in可以判断一个内容是否存在可迭代对象里
word = 'hello'
if x in word:
print('存在')
else:
print('不存在')
格式化输出字符
使用 % 占位符来表示格式化一个字符串
%s ==>表示的是字符串的占位符
%d ==>表示的整数的占位符
%nd ==>打印时,显示n位,如果不够,在前面使用空格补齐,%0nd 前面补0;%-nd后面补空格
%f ==>表示浮点数的占位符
%.nf ==>保留小数点后n位
%x ==>将数字使用十六进制输出,大写 X 输出大写FF
%% ==>输出一个百分号%
name = 'zhangsan'
age = 18
print('大家好,我的名字是',name,'我今年',age,'岁了',sep='')
print('大家好,我的名字是%s,我今年%d岁了'%(name,age))
字符串 format 的使用
{}也可以占位
{}什么都不会写,会读取后面的内容,一一对应
{数字} 根据数字的顺序来进行填入。数字从 0 开始
{变量名}
混合使用 {数字} {变量},但是{}什么都不写 {数字} 是不能混合使用
x = '大家好,我是{},我今年{}岁了'.format('张三',18)
print(x)
#{数字} 根据数字的顺序来进行填入。数字从 0 开始
y = '大家好,我是{1},我今年{0}岁了'.format(20,'jerry')
print(y)
#{变量名}
z = '大家好,我是{name},我今年{age}岁了,我来自{addr}'.format(age=18,name='jack',addr='襄阳')
print(z)
#混合使用 {数字} {变量}
a = '大家好,我是{name},我今年{1}岁了,我来自{0}'.format('泰国',23,name="tony")
print(a)