文章目录
- 一、字符串创建
- 1.1、原始字符串
- 1.2、删除字符串
- 二、字符串索引、切片
- 2.1、字符串序号/索引
- 2.2、切片
- 三、字符串转义
- 四、字符串操作符
- 五、字符串格式化
- 5.1、百分号(%)格式化
- 5.2、str.format()
- 5.3、使用 f-strings 格式化字符串
- 六、字符串的编码与解码
- 6.1、字符串的编码
- 6.2、字符串的解码
- 七、字符串相关函数
- 7.1、查询相关函数
- 7.2、转换函数
- 7.3、判断函数
- 7.4、分隔函数
- 7.5、其他函数
- 八、字符串使用
- 8.1、字符串拼接
- 8.2、字符串去重
以下内容基于Python2.7讲解str字符串类型。
一、字符串创建
字符串有两种四类表示方法,分别是用单引号
、双引号
和三单引号
和三双引号
来表示。
单引号和双引号通常用于定义单行字符串,
三引号通常用于定义多行字符串,字符串中包含了换行缩进等排版字符。
代码示例:
# coding=utf-8str = 'hello world' # 单引号
print(str)str = "hello world" # 双引号
print(str)# 三单引号
str = ''' *********
'''
print(str)
执行结果:
D:\App\python\python2.7.13\Python27\python.exe D:\WorkSpace-Python\Test\test.py
hello world
hello world*********
1.1、原始字符串
原始字符串:在普通字符串前加r或R,字符串中的特殊字符不需要转义,按照字符串的本来“面目”呈现。
1.2、删除字符串
del(str):删除字符串的引用
str = 'hello world'
print(str)# del方法删除变量,若删除后不可再调用
del(str)
# print(str) # NameError: name 'str' is not defined
二、字符串索引、切片
2.1、字符串序号/索引
字符串序号默认从0开始,python中字符串包括两种序号体系:正向递增序号
和反向递减序号
。
- 正向索引:从左至右依次递增,下标从0至n-1
- 反向索引:从右到左依次递减,下标从-1至-n
代码示例如下:
# coding=utf-8str = 'ABCDEFG'
# 获取第一个字符
print(str[0]) # A
# 获取第四个字符
print(str[3]) # D# 获取最后一个字符
print(str[-1]) # G
# 获取倒数第五个字符
print(str[-5]) # Cprint(str[100]) #索引的时候索引值超出范围的时候会报错string index out of range
注意:
索引的时候索引值超出范围的时候会报错string index out of range;
执行结果:
2.2、切片
切片:通过一个等差数列所对应的索引号从字符串中获取多个元素
语法格式一:str[起点:终点]语法格式二:str[起点:终点:步长]
- 起点/终点/步长对应一个
左闭右开 [起点:终点)
的等差数列 - 起点/终点均为索引号(正向索引或反向索引)
起点/终点/步长均可以省略:
- 起点可省略,省略时表示从起始元素开始取
- 终点可省略,省略时表示一直取到最后一个元素
- 步长可省略,省略时默认为 1
# coding=utf-8str = '123456789'#省略起始值,到下标4结束
print(str[:5]) # 12345# 从下标0到逆序下标-2,倒数第二个
print(str[:-1]) # 12345678#省略终止值,默认是序列的结尾,步长是1
print(str[0::1]) # 123456789#从开始到结尾,间隔1个进行取数
print(str[::2]) # 13579#从第二位到第三位,间隔1个进行取数
print(str[1:3:2]) # 2#正向的全部元素
print(str[::]) #123456789#正向的全部元素
print(str[:]) #123456789#逆向的全部元素
print(str[::-1]) #987654321print(str[100:105]) #切片的时候起始位置和终止位置都超出的时候不会进行报错,超出不会打印出来
注意:
经常使用str[:-1]的方式用于删除掉最后一个字符。
切片的时候起始位置和终止位置都超出的时候不会进行报错,超出不会打印出来
特殊用法1:获取全部元素
str[::] #正向的全部元素
str[:] #正向的全部元素
str[::-1] #逆向的全部元素
特殊用法2:混用正向索引和反向索引 (不推荐)
str[1:4:1] # BCD
str[1:-4:1] # BC
str[-7:4:1] # ABCD
三、字符串转义
转义字符用来在字符串中表示一些特殊的字符,例如换行符 \n、制表符 \t 等。下面是一些常见的转义字符:
转义字符 | 含义 |
---|---|
\’ | 表示单引号 |
\" | 表示双引号 |
\ | 表示\f符号 |
\n | 表示换行 |
\b | 表示删除操作, 退格 (Backspace) |
\r | 表示删除本行之前的所有内容 |
\t | 水平制表符 |
转义符示例:
# \b删除前一个字符
print("123\b")
# 方式一:字符串前面加r, 使字符串原样输出,防止转义
print(r"123\b")
# 方式二:转义字符前面加\ ,防止特殊字符被转义,使字符串原样输出
print("123\\b")
print("分割线------------")
print("123\n456")
四、字符串操作符
Python除了支持对数字类型的操作符之外,也支持字符串类型的一些操作符,一些常见的操作符及其作用如下所示:
操作符 | 作用 |
---|---|
x+y | 表示将字符串x和字符串y连接起来 |
x*N 或N*x | 表示将字符串x复制N次 |
x in S | 如果字符串x是字符串S的子字符串,则返回True,如果不是,则返回False |
not in | 如果指定的字符不在字符串中则返回 True |
注意:
- 必须是两个字符串拼接。不能是字符串与数字类型拼接否则会报错。
字符串操作符的作用如下图所示:
# coding=utf-8
x = "123"
s = "1234"print(x+s)
print(x*3)
print(x in s)
五、字符串格式化
Python 的字符串格式化有三种常见方式:百分号(%)格式化、str.format()方法、f-string表达式
5.1、百分号(%)格式化
使用百分号(%)作为占位符。
其中 %s 表示字符串类型,%d 表示整数类型,%f 表示浮点型。%d 和 %f 后面可以加上 .n,表示保留 n 位小数。当需要在字符串中表示 % 字符时,需要用两个百分号转义
符 号 | 描述 |
---|---|
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
例如:
age = 18
name = 'Tom'
print('My name is %s, and I am %d years old.' % (name, age))
输出:
My name is Tom, and I am 18 years old.
5.2、str.format()
此方法可以使用花括号 {}
作为占位符,{}
中可以加入数字,表示占位符的顺序
1、使用{} 的方式赋值
name = 'tom'
age = 25
str1 = 'Hello, {}! You are {} years old.'.format(name, age)
print(str1) # 输出:Hello, tom! You are 25 years old.
2、使用{0} 下标的方式赋值
name = 'Tom'
age = 25
str1 = 'Hello, {0}! You are {1} years old,I have a friend named {0}'.format(name, age)
print(str1) # 输出:Hello, Tom! You are 25 years old,I have a friend named Tom
使用{0} 下标的方式默认下标是0, 当多次用到同一个参数时,可以重复使用同一个下标。
5.3、使用 f-strings 格式化字符串
f-strings是
Python 3.6
引入的,它是一种在字符串中直接插入变量值的简洁方法。使用 f 或 F 字母作为前缀,并在字符串中使用大括号 {} 来插入变量。
name = 'Tom'
age = 25
str1 = f'Hello, {name}! You are {age} years old.'
print(str1) # 输出:Hello, Tom! You are 25 years old.
f-string的详细用法可参考:python中print(f)的用法、print(f‘‘)具体用法、f-string的基本用法
六、字符串的编码与解码
6.1、字符串的编码
将str类型转换为bytes类型,需要使用到字符串的encode()方法
语法格式如下:
str.encode(encoding='utf-8',erros='strict/ignore/replace')
其中errors表示遇到错误的处理方案:
strict表示严格处理,即直接报错;ignore表示忽略;
replace表示替换,对于无法进行编码的字符会用?来进行替换
6.2、字符串的解码
将bytes类型转换成str类型,需要使用到bytes类型的decode()方法
语法格式如下:
bytes.decode(encoding='utf-8',erros='strict/ignore/replace')
其中errors表示遇到错误的处理方案:
strict表示严格处理,即直接报错;ignore表示忽略;
replace表示替换,对于无法进行编码的字符会用?来进行替换
需要注意的是编码和解码格式必须一一对应。
示例如下:
str1 = '中国'
bytes1 = str1.encode(errors='replace') # 当不设置编码时,默认采用utf-8编码
print(bytes1)
bytes2 = str1.encode(encoding='GBK') # 此处采用gbk进行编码
print(bytes2)
str2 = bytes1.decode(encoding='utf-8')
str3 = bytes2.decode(encoding='GBK')
print(str2)
print(str3)
七、字符串相关函数
7.1、查询相关函数
函数 | 描述 |
---|---|
find() | 检测字符串是否包含指定字符,如果是,返回开始的索引值,否则返回-1 。区分大小写 |
rfind() | 从右向左,检测字符串是否包含指定字符,如果是,返回开始的索引值,否则返回-1 。区分大小写 |
index() | 检测字符串是否包含指定字符,如果是,返回开始的索引值,否则提示错误 。区分大小写 |
rindex() | 从右向左,检测字符串是否包含指定字符,如果是,返回开始的索引值,否则提示错误 。区分大小写 |
# coding=utf-8s = "Hello World"print(s.find("h")) # find 区分大小写 没找到返回-1
print(s.find("W"))
print("--------------")
print(s.index("l"))
print(s.rindex("l"))#print(s.index("aa")) # index 未找到抛出异常
7.2、转换函数
函数 | 描述 |
---|---|
lower() | 将字符串转换为小写 |
upper() | 将字符串转换为大写 |
title() | 将字符串中每个单词的首字母大写,其他字母全部转小写 |
capitalize() | 只将字符串的首字母大写,其他字母全部小写 |
strip() | 去除字符串两端的空格 |
lstrip(characters) | 去掉字符串左边的指定字符,默认为空 |
rstrip(characters) | 去掉字符串右边的指定字符,默认为空格 |
swapcase() | 大小写互换, 将大写→小写,小写→大写 |
# coding=utf-8s = "Hello World ABc1 "print(s.upper()) # 全转为大小
print(s.lower()) # 全转为小写
print("--------------")
print(s.title()) #各个单词首字母大小
print(s.capitalize()) #第一个单词首字母大小
print(s.swapcase()) # 大小写互转
7.3、判断函数
函数 | 描述 |
---|---|
startswith(prefix, start, end) | 检查字符串是否以指定前缀开始。 是则返回 True,否则返回 False |
endswith(suffix, start, end) | 检查字符串是否以指定后缀结束。是则返回 True,否则返回 False |
isspace() | 如果 str1 中只包含空格,则返回 True,否则返回 False. ''空串不是空格 |
isalnum() | 如果字符串至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False |
isdigit() | 如果字符串只包含数字则返回 True 否则返回 False |
isalpha() | 如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False |
isdecimal | 检测字符串是否以数字组成 必须是纯数字,有小数点都不算纯数字 |
isinstance() | 检测是否是小数 |
isupper() | 判断字符串是否都是大写字母 |
islower() | 判断字符串是否都是小写字母 |
# coding=utf-8s = "Hello World ABc1 "print(s.startswith("h")) # False
print(s.endswith("H")) # False
print(' '.isspace()) # 只包含空格 True
print(''.isspace()) # False 空串不是空白符
7.4、分隔函数
函数 | 描述 |
---|---|
split() | 不包含分隔符,如果maxsplit有指定值,则仅分割 maxsplit 个子字符串 |
splitlines() | 按照行分隔,返回一个包含各行作为元素的列表 |
partition() | 可以将字符串以 str1 进行分隔成三个部分, 返回元组 |
rpartition() | 从右向左,可以将字符串以str1进行分隔成三个部分 |
# coding=utf-8s = "Hello,World,ABc1 "
s1 = s.split(",") # 不包含分隔符, 返回list列表
print(s1,type(s1))s2 = s.partition(",") # 不包含分隔符, 返回tuple元组
print(s2,type(s2))print("aaa\nbbb\nccc".splitlines()) # 按照行分隔,返回list列表
7.5、其他函数
函数 | 描述 |
---|---|
count(substring, start, end) | 返回str1在string中指定索引范围内[start,end]出现的次数 |
join(iterable) | 是使用某个字符串作为拼接符 print( 字符串.join(变量) ) |
replace() | 将string中的str1替换成str2,如果指定count,则不超过count次 |
len() | 返回字符串的长度值 |
zfill(width) | 返回一个指定宽度的字符串,原字符串右对齐,前面填充 0。若字符串长度超过指定width,则原文输出 |
ljust(width, fillchar) | 填充字符串,原字符居左,填充的字符居右 (默认填充空格) |
rjust(width, fillchar) | 填充字符串,原字符居右,填充的字符居左, (默认填充空格) 指定的宽度不足,就打印原字符串 |
center(width, fillchar) | 填充字符串,原字符居中 (默认填充空格) |
eval() | 将()内的字符串两端的引号去掉;将字符串str当成有效的表达式来求值并返回计算结果 |
str(x) | 任意类型x所对应的字符串形式 str(1.23)的结果为"1.23" str([1,2])的结果为"[1,2]" |
chr(x) | x为Unicode编码,返回其对应的字符 |
ord(x) | x为单个字符,返回其对应的Unicode编码 |
# coding=utf-8s = "Hello,World,ABc1 "
print(s.count("l")) # 返回字符串出现的次数print(len(s)) # 返回字符串总长度print("-".join(s)) # 使用-作为拼接符print(s.replace("l","*")) # 把l替换成*
字符串填充
str = "Tom"
# zfill(width) 返回一个指定宽度的字符串,原字符串右对齐,前面填充 0
print("Tom".zfill(6)) # 000Tom
print("Tom".zfill(2)) # Tomprint(str.ljust(10,"&")) #Tom&&&&&&&
print(str.rjust(10,"&")) #&&&&&&&Tom
print(str.center(10,"&")) #&&&Tom&&&&
eval() 将字符串str当成有效的表达式来求值并返回计算结果
a="2+3"
print(eval(a)) # 输出5str4 = "(1222, 244, 435)"
print(eval(str4)) #输出(1222, 244, 435)print(eval("a")) # 输出a
print(eval("2+a")) # 无法计算,抛出异常
chr() ord()
#chr()函数 返回编码对应的UNicode(Ascii码)的字符
print(chr(88)) # X#ord()函数 返回字符表示的对应码值
print(ord('&')) # 38
八、字符串使用
8.1、字符串拼接
在 Python 中,我们可以使用加法操作符 + 来拼接字符串,也可以使用join()连接字符串数组,还可以通过\跨行连接字符串。
(1)使用+拼接字符串
str1 = 'Hello'
str2 = 'world'
str3 = str1 + ' ' + str2
print(str3) # 输出:Hello world
(2)使用join连接字符串组
a = {"aa","bb"}
print("-".join(a)) # 输出结果:aa-bb# 需要注意针对字典,join结合的是键
a = {"name":"张三", "sex":"男"}
print("是".join(a)) #输出结果:name是sex
(3) 使用 \ 字符串跨行连接
a = "test1" \
"test2"
print(a) #输出的结果是test1test2
8.2、字符串去重
1. 字符串拼接以及not in
示例:
str='helloworldhelloworld'
new_s=''
for item in str:if item not in new_s:new_s+=item #拼接操作
print(new_s)
输出结果:
helowrd
2. 使用索引以及not in
示例:
str='helloworldhelloworld'
new_s=''
for i in range(len(str)):if str[i] not in new_s:new_s+=str[i] #拼接操作
print(new_s)
输出结果:
helowrd
3. 通过集合去重+列表的排序
示例:
str='helloworldhelloworld'
new_s=set(str)
lst=list(new_s)
lst.sort(key=str.index)
print(''.join(lst))
输出结果:
helowrd
参考文章:
https://blog.csdn.net/weixin_56261190/article/details/143576517
https://blog.csdn.net/m0_70312393/article/details/143023450