Python3字符串
Python访问字符串中的值
Python中的字符串用单引号(')或双引号(")括起来,同时使用反斜杠()转义特殊字符。
字符串中的每一个字符都会对应一个唯一的下标(索引)用来表示字符在字符串中的位置。
下标是从0开始一次增加的, 0对应的是第一个字符(0 ~ 字符串长度-1)
可以是从-1开始依次减小,-1代表最后一个字符(-1 ~ -字符串长度)
获取字符串中的单个字符的语法格式如下:
<font color=#00aa00>字符串变量[下标]</font>
注意:
下标的返回是0~字符串长度-1
字符串 - 只要结果是字符串的表达式都可以,例如:字符串字面量, 字符串变量
[] - 固定写法
下标 - 需要获取的字符对应的下标; 注意,这儿的下标不能越界
result = 'how are you!'[0] # 获取字符串'how are you!'中下标是0的字符,并且赋给变量result
print(result)
print('how are you!'[-4]) # y
字符串的截取的语法格式如下:
方法一:
<font color=#00aa00> 字符串变量[头下标:尾下标] </font>
从开始下标开始,获取到结束下标前为止。每次下标值加上步长去获取下一个
说明:
字符串 - 只要结果是字符串的表达式都可以,例如:字符串字面量, 字符串变量
[] - 固定写法
开始下标、结束下标 - 下标值(这儿的下标可以越界)
步长 - 必须是整数(正数和负数都行); 如果步长是正数,是从开始下标开始从前往后获取;如果步长是负数,是从开始下标开始从后往前获取;
str1 = 'hello python!'
print('结果1:', str1[0:-1:2]) # 从前往后取
print('结果2:', str1[-1:0:-2]) # 从后往前取
print('结果3:', str1[-1:-100:-1]) # 结束下标越界
print('结果4:', str1[100: -100: -1]) # 下标越界
方法二:
方法二:(省略步长)
字符串[开始下标:结束下标] - 步长是1;从开始下标开始到结束下标前为止,一个一个的取!
print('when i was young!'[2:6])
方法三
方法三:(省略开始下标和结束下标)
a.省略开始下标
字符串[:结束下标:步长] - 当步长是正数,从字符串的第一个字符开始取到结束下标前为止;当步长是负数,从字符串的最后一个字符开始取到结束下标前为止.
b.省略结束下标
字符串[开始下标::步长] - 当步长是正数,从开始下标开始取到字符串最后一个字符为止;当步长是负数,从开始下标开始取到字符串的第一个字符为止
str3 = 'when i was young!'
print(str3[:6], str3[:6:-1])
print(str3[2:], str3[2::-1])
print(str3[:])
print(str3[::-1]) # 让字符串倒序
print(str3)
Python字符串运算符
下表实例变量a值为字符串 "Hello",b变量值为 "Python":
操作符 |
描述 |
实例 |
+ |
字符串连接 |
a + b 输出结果: HelloPython |
* |
重复输出字符串 |
a*2 输出结果:HelloHello |
[] |
通过索引获取字符串中字符 |
a[1] 输出结果 e |
[ : ] |
截取字符串中的一部分 |
a[1:4] 输出结果 ell |
in |
成员运算符 - 如果字符串中包含给定的字符返回 True |
'H' in a 输出结果 1 |
not in |
成员运算符 - 如果字符串中不包含给定的字符返回 True |
'M' not in a 输出结果 1 |
r/R |
原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 |
print( r'\n' )print( R'\n' ) |
% |
格式字符串 |
a = 'Hello'
b = 'Python'
print(a + ' ' + b) # 打印:Hello Python
str1 = a * 3
print(str1) # 打印:HelloHelloHello
re = 'He' in a
print(re) # 打印:True
re = 'He' not in a
print(re) # 打印: False
比较是否相等
==, != 可以判断两个字符串是否相等或者不相等
字符比较大小:
从第一个字符开始依次往后找,找到第一个不相等的字符对,判断它们的编码值的大小,谁的编码值大,对应的字符串就大;不会再往后比较了!
应用:
1.判断是否是小写字母: 'a'<=char<='z' <===> char>='a' and char<='z'
2.判断是否是大写字母: 'A'<=char<='Z'
3.判断是否是字母: 'a' <= char <= 'z' or 'A' <= char <= 'Z'
print('abc' == 'abc') # True
print('abc' == 'cba') # False
print('abc' != 'abc') # False
print('abdcb' > 'abczde') #True
运用:判断一个字符串中第3个字符是否是字母
str1 = 'sh是23.ssy23'
char = str1[2] # 将第3个字符取出
print('是否是字母:', 'a' <= char <= 'z' or 'A' <= char <= 'Z')
print('是否是中文:', '\u4e00' <= char <= '\u9fa5')
Python字符串格式化
Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
在字符串中通过格式占位符来代替字符串中变化的部分,然后在后面通过数据或者变量确定变化
语法:
包含占位符的字符串 % (值1, 值2, 值3...)
input_str = input('输入一个字符串:')
message = '%s的长度是%d, 最后一个字符是%c' %(input_str, len(input_str), input_str[-1])
print(message)
python字符串格式化符号:
符号 |
描述 |
%c |
格式化字符及其ASCII码 |
%s |
格式化字符串 |
%d |
格式化整数 |
%u |
格式化无符号整型 |
%o |
格式化无符号八进制数 |
%x |
格式化无符号十六进制数 |
%X |
格式化无符号十六进制数(大写) |
%f |
格式化浮点数字,可指定小数点后的精度 |
%e |
用科学计数法格式化浮点数 |
%E |
作用同%e,用科学计数法格式化浮点数 |
%g |
%f和%e的简写 |
%G |
%f 和 %E 的简写 |
--
类型转换
1.基本语法
语法:
类型名(数据) - 将指定数据转换成指定类型
说明:
类型名 - 任何python支持的,或者自定的类型都可以
数据 - 需要转换的对象(类型不同要求可能不一样)
2.转换实例
int(数据) -> 将其他数据转换成整型
a = int(-10.90) # 所有浮点数可以转换成整数,直接保留整数部分
b = int(False) # 所有布尔可以转化成整数, True -> 1; False -> 0
c = int('-120') # 只有去掉字符串的引号后本身就是一个整数的字符串才能转换成整型
print(a, b, c)
float(数据) -> 将其他数据转换成浮点型
a = float(100) # 所有整数都可以转换成浮点数,在后面加.0
b = float(True) # 所有布尔可以转化成浮点数, True -> 1.0; False -> 0.0
c = float('12.9') # 去掉引号后本身就是一个数字的字符串能转换成浮点型
print(a, b, c)
bool(数据) -> 将其他类型转换成布尔
a = bool(0)
b = bool(-0.0)
c = bool('')
d = bool([])
e = bool({})
f = bool(None)
print(a, b, c, d, e, f)
- python中所有的数据都可以转换成布尔
- 所有为空为0的值都会转换成False,其他都是True
str(数据) -> 将其他数据转换成字符串
a = str(100)
print(a)
print('abc'+str(100))
- python中所有的数据都可以转换成字符串,而且转换的时候就是单纯的在最外面加引号
Python 的字符串内建函数
Python 的字符串常用内建函数如下:
序号 |
方法 |
描述 |
1 |
capitalize() |
将字符串的第一个字符转换为大写 |
str2 = 'abc'
print(str2.capitalize()) # Abc
序号 |
方法 |
描述 |
2 |
center(width, fillchar) |
返回一个指定的宽度 width 居中的字符串,fillchar 为填充的字符,默认为空格。 |
str1 = 'abc'
print(str1.center(7, '0'))
序号 |
方法 |
描述 |
3 |
count(str) |
返回 str 在 string 里面出现的次数 |
print('abc and hight a'.count('abc'))
序号 |
方法 |
描述 |
4 |
bytes.decode(encoding="utf-8", errors="strict") |
Python3 中没有 decode 方法,但我们可以使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象可以由 str.encode() 来编码返回。 |
str1 = '千峰'
str1_new = str1.encode(encoding='UTF-8') # \xe5\x8d\x83\xe5\xb3\xb0'
print(str1_new)
print(str1_new.decode("UTF-8"))
序号 |
方法 |
描述 |
5 |
encode(encoding='UTF-8',errors='strict') |
以 encoding 指定的编码格式编码字符串,如果出错默认报一个ValueError 的异常,除非 errors 指定的是'ignore'或者'replace' |
str1 = '千峰'
str1_new = str1.encode(encoding='UTF-8') # \xe5\x8d\x83\xe5\xb3\xb0'
print(str1_new)
序号 |
方法 |
描述 |
6 |
endswith(suffix) |
检查字符串是否以 obj 结束,如果beg 或者 end 指定则检查指定的范围内是否以 obj 结束,如果是,返回 True,否则返回 False. |
str3 = '床前明月光'
print(str3.endswith('光')) # True
序号 |
方法 |
描述 |
7 |
expandtabs(tabsize=8) |
把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8 。 |
str1 = '\tabc'
print(len(str1))
print(len(str1.expandtabs(tabsize=8)))
序号 |
方法 |
描述 |
8 |
find(str, beg=0 end=len(string)) |
检测 str 是否包含在字符串中,如果指定范围 beg 和 end ,则检查是否包含在指定范围内,如果包含返回开始的索引值,否则返回-1 |
str1 = "this is string example"
str2 = "exam"
print(str1.find(str2, len(str2)))
序号 |
方法 |
描述 |
9 |
index(str, beg=0, end=len(string)) |
跟find()方法一样,只不过如果str不在字符串中会报一个异常. |
str1 = "this is string example....wow!!!"
str2 = "exam"
print(str1.index(str2, len(str2)))
序号 |
方法 |
描述 |
10 |
isalnum() |
如果字符串至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False |
str1 = "this is string example....wow!!!"
print(str2.isalnum()) # False
序号 |
方法 |
描述 |
11 |
isalpha() |
如果字符串至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False |
str2 = "exam"
print(str2.isalpha()) #True
序号 |
方法 |
描述 |
12 |
isdigit() |
如果字符串只包含数字则返回 True 否则返回 False.. |
str1 = '12345'
str2 = 'abc123'
print(str1.isdigit(), str2.isdigit())
序号 |
方法 |
描述 |
13 |
islower() |
如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False |
str1 = 'asd123'
str2 = 'Asd123'
str3 = 'ASD123'
print(str1.islower()) # True
print(str2.islower()) # False
print(str3.islower()) # False
序号 |
方法 |
描述 |
14 |
isnumeric() |
如果字符串中只包含数字字符,则返回 True,否则返回 False(中文数字也可以) |
str1 = '123'
str2 = 'as123'
str3 = 'asd'
print(str1.isnumeric()) # True
print(str2.isnumeric()) # False
print(str3.isnumeric()) # False
序号 |
方法 |
描述 |
15 |
isspace() |
如果字符串中只包含空白,则返回 True,否则返回 False. |
str1 = ' '
str2 = 'ase123'
print(str1.isspace())
print(str2.isspace())
序号 |
方法 |
描述 |
16 |
istitle() |
如果字符串是标题化的(见 title())则返回 True,否则返回 False |
str1 = 'Hello World'
print(str1.istitle()) # True
序号 |
方法 |
描述 |
17 |
isupper() |
如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False |
str1 = 'H11111 P22222'
str2 = 'hello world'
print(str1.isupper())
print(str2.isupper())
序号 |
方法 |
描述 |
18 |
join(seq) |
以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
new_str = '**'.join('abc')
print(new_str)
序号 |
方法 |
描述 |
19 |
len(string) |
返回字符串长度 |
print(len('abc'))
序号 |
方法 |
描述 |
20 |
ljust(width[, fillchar]) |
返回一个原字符串左对齐,并使用 fillchar 填充至长度 width 的新字符串,fillchar 默认为空格。 |
print(str1.ljust(7, '*'))
序号 |
方法 |
描述 |
21 |
lower() |
转换字符串中所有大写字符为小写. |
str2 = "EXAM"
print(str2.lower())
序号 |
方法 |
描述 |
22 |
lstrip() |
截掉字符串左边的空格或指定字符。 |
str1 = 'a asd1'
print(str1) # a asd1
print(str1.lstrip('a')) # asd1
序号 |
方法 |
描述 |
23 |
maketrans() |
创建字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示需要转换的字符,第二个参数也是字符串表示转换的目标。 |
序号 |
方法 |
描述 |
24 |
max(str) |
返回字符串 str 中最大的字母。 |
str1 = 'abcd'
print(max(str1)) # d
序号 |
方法 |
描述 |
25 |
min(str) |
返回字符串 str 中最小的字母。 |
str1 = 'abcd'
print(min(str1)) # a
序号 |
方法 |
描述 |
26 |
replace(old, new [, max]) |
把 将字符串中的 str1 替换成 str2,如果 max 指定,则替换不超过 max 次。 |
str1 = 'HELLO world HELLO python'
print(str1.replace('HELLO', 'hello', 2))
print(str1.replace('HELLO', 'hello', 1))
序号 |
方法 |
描述 |
27 |
rfind(str, beg=0,end=len(string)) |
类似于 find()函数,不过是从右边开始查找. |
str1 = "this is string example"
str2 = "exam"
print(str1.rfind(str2, len(str2)))
序号 |
方法 |
描述 |
28 |
rindex( str, beg=0, end=len(string)) |
类似于 index(),不过是从右边开始. |
str1 = "this is string example....wow!!!"
str2 = "abc"
print(str1.rindex(str2, len(str2))) # ValueError: substring not found
序号 |
方法 |
描述 |
29 |
rjust(width,[, fillchar]) |
返回一个原字符串右对齐,并使用fillchar(默认空格)填充至长度 width 的新字符串 |
print(str1.ljust(7, '*'))
序号 |
方法 |
描述 |
30 |
rstrip() |
删除字符串字符串末尾的空格. |
str1 = 'abc123 '
print(str1, len(str1)) # abc123 9
print(str1.rstrip(), len(str1.rstrip())) # abc123 6
序号 |
方法 |
描述 |
31 |
split(str="", num=string.count(str)) |
num=string.count(str)) 以 str 为分隔符截取字符串,如果 num 有指定值,则仅截取 num 个子字符串 |
print('12,89,90'.split(','))
序号 |
方法 |
描述 |
32 |
splitlines([keepends]) |
按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 |
str = '11\n222\n3333\n'
print(str.splitlines(True)) # ['11\n', '222\n', '3333\n']
print(str.splitlines(False)) # ['11', '222', '3333']
序号 |
方法 |
描述 |
33 |
startswith(str, beg=0,end=len(string)) |
检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查。 |
str1 = 'today is a good day'
print(str1.startswith('today')) # True
print(str1.startswith('hello')) # False
序号 |
方法 |
描述 |
34 |
strip([chars]) |
在字符串上执行 lstrip()和 rstrip() |
str = '11111234511111'
print(str.strip('1')) # 2345
print(str.lstrip('1')) # 234511111
print(str.rstrip('1')) # 111112345
序号 |
方法 |
描述 |
35 |
swapcase() |
将字符串中大写转换为小写,小写转换为大写 |
str1 = 'Hello World'
print(str1.swapcase()) # hELLO wORLD
序号 |
方法 |
描述 |
36 |
title() |
返回"标题化"的字符串,就是说所有单词都是以大写开始,其余字母均为小写(见 istitle()) |
str1 = 'hello world'
print(str1.title()) # Hello World
序号 |
方法 |
描述 |
37 |
translate(table, deletechars="") |
根据 str 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 deletechars 参数中 |
序号 |
方法 |
描述 |
38 |
upper() |
转换字符串中的小写字母为大写 |
str2 = "exam"
print(str2.upper())
序号 |
方法 |
描述 |
39 |
zfill (width) |
返回长度为 width 的字符串,原字符串右对齐,前面填充0 |
num = input('请输入顺序号:')
# 生成序号后面变化的部分
new_num = num.zfill(4)
study_num = 'py1809'+new_num
print(study_num)
序号 |
方法 |
描述 |
40 |
isdecimal() |
检查字符串是否只包含十进制字符,如果是返回 true,否则返回 false。 |
str1 = 'abc123'
str2 = '12345'
print(str1.isdecimal()) # False
print(str2.isdecimal()) # True