字符串
文本程序中通过字符串(string)类型表示。
如何定义字符串
- 用两个双引号(
" "
)、单引号(' '
)、三单引号(''' '''
)、三双引号(""" """
)括起来表示。 - 其中
'''大段数数据定义在三引号中数据叫docstring'''
规则
- 双引号中数据不可换行,三引号中数据可以换行。
- 在
" "
中不能再次出现"
,可以出现'
; - 在
' '
中不能再次出现'
,可以出现"
; - 在
''' '''
中不能再次出现'''
,可以出现'
、"
和"""
; - 在
""" """
中不能再次出现"""
,可以出现'
、"
和'''
。 - 如下:
my_str1 = 'h"ello'
my_str2 = "h'ello"
my_str3 = '''
he'llo
wor"ld
nih"""ao
'''
my_str4 = """he'l"l'''o"""
格式化字符串(输出)
- 方式一:占位符
把数据按照指定类型进行输出显示。
常用的格式化符号:
%s : 把数据按照字符串方式进行输出
%d :把数据按照int类型方式进行输出
%f : 把数据按照浮点数方式进行输出String = '字符串内用%s或者%d等占位'
String % '对应的值'
# 多个格式化占位符进行传参的时候,多个参数要放到小括号里面
print("姓名:%s, 年龄:%d" % ('李凡', 23))
# %f进行输出显示的时候,默认保留6位小数
print("圆周率:%f" % 3.14)
print("圆周率:%.2f" % 3.14) # %.2f表示保留2位小数
- 方式二:f-string
注意:f-string只能在python3.6及以上版本使用
字符串格式化输出通用的方式:使用字符串格式化占位符
name = '李凡'
age = 23
msg = f"姓名:{name},年龄:{age},计算:12×30={12*30}"
Out:姓名:李凡,年龄:23,计算12×30=360
- 错误写法:
{{信息}}
# 注意点:两个大括号会变成一个
msg = f'''姓名: {{name}} 年龄: {{age}}'''
Out:姓名: {name} 年龄: {age}
- 方式三:"{}".format()
str.formart()
,利用{}
占位符格式化字符串,应该是方式二的一种正规写法
'{}公斤,{}厘米'.formart(70, 170)
# 重复输出时可以使用数字标记顺序
'{0}公斤,{1}厘米,{0}公斤'.formart(70, 175)
(下标)索引访问方式
其实就是一个编号,对于Python程序来说是一个数字,下标有正数下标和负数下标,可以根据下标获取对象中的某个数据。
- 正向索引:对应的第一个元素对应的下标是0
- 反向索引:对应的倒数第一个元素的小标是-1
为什么后面不是从0开始呢?因为前面是0后面是0,那谁知道是哪个是哪个。
区间索引(切片)
定义:通过下标范围获取对象中的一部分数据。[A:B:C]
从位置A
到B
部分的字符串,不包含位置B,C
是步长.
- 不写
A
,默认从0开始 - 不写
B
,默认到结尾 - 不指定
C
,步长默认为1
(正数步长表示从左到右获取数据,负数步长表示从右到左获取数据)
注意:下标范围如果不对,不会崩溃,获取的数据是空的字符串。
# 使用切片获取对象(字符串、列表、元组)中的一部分数据
result = my_str[1:4:2]
result = my_str[:4]
result = my_str[1:]
result = my_str[1:4]
result = my_str[::-1] # 把整个字符串获取出来后,倒着取字符数据
字符串拼接
字符串拼接不同类型不可以直接拼接,需要转换。
a = '1'
print(a * 5)
Out:11111
b = 1
# a不可以加直接加b,但可以转换后相加
int(a) + b # 2
a + str(b) # '11'
转义字符
-
\
转义字符,与不同字母拼接产生的含义不同 -
\t
制表符 -
\n
换行 -
\\
转义成\
原始字符串
r"\在r开头的字符串不起做用,\n就是打印'\n'而不是换行"
字符串的断行
使用\
或()
断行:
# 断行
a = 1
if a < 5: print('小于5')
if a < 5:
print('小于5')
# 换行
result = x * 5 \
+ y
result = (x * 5
+ y)
result = "这是字符串的" \
"换行"
部分常用方法
方法 | 使用 |
str.find(‘x’,beg,end) | 根据指定字符串查找对应的索引beg:开始下标end:结束下标(不包含)如果没有找到返回-1,不会报错 |
str.rfind(‘x’,beg,end) | 与find()相同,只不过是从右往左查找 |
str.index(‘x’,beg,end) | 根据指定字符串查找对应的索引(与find唯一区别就是找不到会报错)beg:开始下标end:结束下标(不包含)如果没有找到会报错ValueError: substring not found |
str.rindex(‘x’,beg,end) | 同index(),只不过从右往左找 |
str.count(‘x’,beg,end) | 统计指定字符串在字符串中出现的次数beg:开始下标end:结束下标(不包含) |
str.replace(‘x’,‘y’,z) | 替换字符串x:要替换字符串y:替换后字符串z:替换的次数(不超过),默认全部替换 |
str.split(‘x’,z) | 分割字符串,返回列表x:指定分割的字符串z:分割次数(默认全部分割) |
str.splitlines(‘x’,z) | 按照行分隔,返回一个包含各行作为元素的列表 |
str.partition(‘x’) | 根据指定的分隔符’x’将字符串进行分割。如果字符串包含指定的分隔符,则返回一个3元的元组:第一个为分隔符左边的子串第二个为分隔符本身第三个为分隔符右边的子串如果’x’存在多个,也只分割第一次出现的位置 |
str.rpartition(‘x’) | 与partition()相同,只不过从右往左查找分割 |
str.startswith(‘x’) | 检查字符串是否是以’x’开头是则返回True否则返回False |
str.endswith(‘x’) | 检查字符串是否是以’x’结尾是则返回True否则返回False |
str.strip(‘x’) | 去除字符串开头结尾(左右两侧)的’x’默认去除两侧的空白(\n\t) |
str.lstrip(‘x’) | 与strip()相同,只不过只去除字符串左侧的空白 |
str.rstrip(‘x’) | 与strip()相同,只不过只去除字符串右侧的空白 |
‘x’.join(str/list/tuple) | 将序列中的元素以指定的字符连接生成一个新的字符串。返回通过指定字符连接序列中元素后生成的新字符串。注意:join和列表结合使用的时候,列表里面的元素必须是字符串 |
str.capitalize() | 把字符串的第一个字母大写 |
str.title() | 把字符串的每个单词的首字母大写 |
str.lower() | 把字符串的所有大写字母改为小写 |
str.upper() | 把字符串的所有小写字母改为大写 |
str.isnumeric() | 检查字符串是否由数字组成。 True: Unicode数字,全角数字(双字节),罗马数字,汉字数字 False: 无 Error: byte数字(单字节) |
str.isdecimal() | 检测字符串是否只由数字组成True: Unicode数字,全角数字(双字节)False: 罗马数字,汉字数字Error: byte数字(单字节) |
str.isdigit() | 检测字符串是否只由数字组成True: Unicode数字,全角数字(双字节),byte数字(单字节),罗马数字False: 汉字数字Error: 无 |
str.isalpha() | 检查字符串是否只由字母组成 |
str.islower() | 检查字符串中所有的字母是否都为小写 |
str.isupper() | 检查字符串中所有的字母是否都为大写 |
str.isspace() | 检查字符串中是否都是空格(包括\t) |
- 更多字符串方法参考:https://docs.python.org/3/library/stdtypes.html#string-methodsisnumeric()
- isdigit()、isdecimal()的区别:javascript:void(0)