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'))
# 编码和解码的格式必须相同

结尾

每一个闪闪发光的人都在背后熬过了一个又一个不为人知的黑夜。