Python语言之字符串
Python语言之字符串
前言
人生苦短,我用Python。
一、字符串介绍
什么是字符串
字符串是一种表示文本数据的类型,字符串又被称为不可变的字符序列。
s = 'abc'或"abc"或'''abc'''或""abc""
字符串的驻留机制
仅保存一份相同且不可变的字符串的方法,不同的值被存放在字符串的驻留池中,python的驻留机制对相同的字符串只保留一份拷贝,后续创建相同的字符串时,不会开辟新空间,而是把该字符串的地址赋给新创建的变量。
驻留机制的几种情况:
- 字符串的长度为0或1时
- 符合标识符的字符串
- 字符串只在编译时进行驻留,而非运行时
- [-5,256]之间的整数数字
sys中的intern方法强制两个字符串指向同一个对象
驻留机制的优缺点:
当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存,因此拼接字符串和修改字符串是会比较影响性能的。
转义字符
对于单引号或者双引号这些特殊的符号,我们可以对他们进行转义。
\(在行尾时) 续行符号
\\ 反斜杠符号
\" 双引号
\n 换行
\b 退格
\r 回车
\t 横向制表符
思考一刻:
运行如下代码时候,为什么会空出2行?
print('Start')
print('\n')
print('End')
因为print函数自身带了一个换行,如果使用print()就可以输出一个换行
二、字符串的输出和输入
字符串的输出
常见的格式化符号
%s 通过str()字符串转换来格式化
%d 有符号十进制整数
%f 浮点实数
例:
name1 ="小明"
name2="小红"
print("大家好,我叫%s" %name1)
print("大家好,我们是%s和%s" %(name1,name2))
字符串的输入
Python3提供了 input() 函数从标准输入读取一行文本,默认的标准输入是键盘。input可以接收一个Python表达式作为输入,并将运算结果返回。
username=input("请输入用户名")
print(username)
三、访问字符串中的值
字符串的存储方式
字符串中的每个字符都对应一个下标,下标编号是从0开始的。
字符串: a b c d e f g
下标: [0] [1] [2] [3] [4] [5] [6]
切片
切片的语法格式如下所示:
[起始:结束:步长]
切片选取的区间属于左闭右开型,即从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身)
使用切片截取字符串:
假设有字符串 name="abcdef",则:
name[ 0 : 3 ]为abc
name[ 3 : 5 ]为de
name[ 1 : ]为bcdef
name[ 1 : -1 ]为bcde
name[ : : -2 ]为fdb
name[ 1 : -1 : 2 ]为bd
格式化字符串
- %作占位符
name = 'aurora'
age = 20
print('我叫%s,今年%d岁' % (name,age))
- {}作占位符
name = 'aurora'
age = 20
print('我叫{0},今年{1}岁' .format(name,age))
print(f'我叫{name},今年{age}岁')
print('{0:.3}'.format(3.1415926))# .3表示一共是三位数
print('{0:.3f}'.format(3.1415926))# .3f表示是三位小数
print('{0:10.3f}'.format(3.1415926))# 同时设置宽度和精度,一共是10位数,3位是小数
四、字符串内建函数
find函数:检测字符串是否包括子字符串
str.find(str, beg=0, end=len(string))
例:s.find(‘c’,0,1)
参数如下:
str -- 指定检索的字符串。
beg -- 开始索引,默认为0。(包括)
end -- 结束索引,默认为字符串的长度。(不包括)
找到则返回索引位置,找不返回-1。
index函数:检测字符串是否包括子字符串
str.index(str, beg=0, end=len(string))
参数如下:
str -- 指定检索的字符串。
beg -- 开始索引,默认为0。(包括)
end -- 结束索引,默认为字符串的长度。(不包括)
找到则返回索引位置,找不到抛出异常。
upper:将小写字母转为大写字母
str.upper()
例:
mystr = 'hello world itheima and itheimaApp'
newStr = mystr.upper()
结果为:HELLO WORLD ITHEIMA AND ITHEIMAAPP
lower:将大写字母转为小写字母
str.lower()
swapcase:将大写字母转为小写字母,将小写字母转为大写字母
str.swapcase()
capitalize:第一个字符大写,其他字符小写
str.capitalize()
title:所有单词首字母大写,其余字母小写
str.title()
center:返回一个指定的宽度width,居中的字符串
str.center(width[, fillchar])
参数如下:
width -- 字符串的总宽度。
fillchar -- 填充字符。
ljust:左对齐,使用空格填充至指定长度的新字符串
str.ljust(width[, fillchar])
参数如下:
width -- 指定字符串长度。
fillchar -- 填充字符,默认为空格。
注:字符串在右边进行填充
rjust:右对齐,使用空格填充至指定长度的新字符串
str.rjust(width[, fillchar])
参数如下:
width -- 指定字符串长度。
fillchar -- 填充字符,默认为空格。
splite函数:通过指定分隔符对字符串进行切片
str.split(str="", num=string.count(str))
参数如下:
str -- 分隔符。默认为所有空字符,如空格,tab等。
num -- 分割次(默认:有多少个str分割多少次)
count函数:统计字符串中某个字符、字符串的个数
str.count(sub, start= 0, end=len(string))
参数如下:
sub -- 搜索的子字符串
start -- 字符串开始搜索的位置(包括)
end -- 字符串中结束搜索的位置(不包括)
replace函数:将旧字符串替换为新字符串
str.replace(old, new[, max])
参数如下:
old -- 将被替换的字符串。
new -- 新字符串,用于替换old字符串。
max -- 可选字符串,替换不超过max次(<=max次)
startswith:检查字符串是否以指定子串开头
str.startswith(str, beg=0,end=len(string))
参数如下:
str -- 检测的字符串。
strbeg -- 可选参数用于设置字符串检测的起始位置。(包括)
strend -- 可选参数用于设置字符串检测的结束位置。(不包括)
endswith:检查字符串是否以指定子串结尾
str.endswith(suffix[, start[, end]])
参数如下:
suffix -- 该参数可以是一个字符串或者是一个元素。
start -- 字符串中的开始位置。(包括)
end -- 字符串中的结束位置。(不包括)
lstrip:截掉字符串左边的空格或指定字符
str.lstrip([chars])
参数如下:
chars --指定删除的字符。
注:从字符串最左边开始
rstrip:截掉字符串右边的空格或指定字符
str.rstrip([chars])
参数如下:
chars –指定删除的字符。
strip:截掉字符串左右边的空格或指定字符
str.strip([chars])
参数如下:
chars --移除字符串头尾指定的字符。
五、字符串的比较操作
运算符:>,>=,<,<=,==,!=
比较规则:首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,直到两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的所有后续字符将不再被比较。
print('apple'>'app')
print('apple'>'banana')
print(ord('a'),ord('b'))
print(chr(97),chr(98))
比较原理:两个字符串比较时,比较的是其ordinal value(原始值),调用内置函数ord可以得到指定字符的ordinal value。与内置函数对应的是内置函数chr,调用内置函数chr时指定的ordinal value可以得到其对应的字符。
六、字符串运算符
操作符与其描述:
+ 字符串连接
* 重复输出字符串
[] 通过索引获取字符串中的字符(a[1]获取第一个字符)
[:] 截取字符串中的一部分
in 成员运算符,如果字符串中包含给定的字符或字符串,返回True
not in 成员运算符。如果字符串中不包含给定字符或字符串,返回True
r/R 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。如print(r'\n')打印出来的是\n
f 格式化字符串常量,是Python3.6新引入的一种字符串格式化方法,使格式化字符串的操作更加简便。
name = "小明"
print('他是{name}')
print(f'他是{name}')
七、字符串的编码转换
编码与解码的方式
-
编码:将字符串转换为二进制数据(bytes)
-
解码:将bytes类型的数据转换成字符串类型
s = '二十四桥明月夜'
# 编码
print(s.encode(encoding='GBK'))
# 在GBK编码方式中,一个中文占两个字节
print(s.encode(encoding='UTF-8'))
# 在UTF-8编码方式中,一个中文占三个字节
# 解码
# byte代表的就是一个二进制数据(字节类型的数据)
byte1 = s.encode(encoding='GBK')
print(byte1.decode(encoding='GBK'))
byte2 = s.encode(encoding='UTF-8')
print(byte2.decode(encoding='UTF-8'))
# 编码和解码的格式必须相同
结尾
每一个闪闪发光的人都在背后熬过了一个又一个不为人知的黑夜。