字符串
字符串
字符串是 Python 中最常用的数据类型。我们可以使用引号( ’ ’ 或 " " )来创建字符串。
创建字符串很简单,只要为变量分配一个值即可。
访问字符串中的值
Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。
Python 访问子字符串,可以使用方括号 [] 来截取字符串。
字符串运算符
操作符 | 描述 |
+ | 字符串连接 |
* | 重复输出字符串 |
[] | 通过索引获取字符串中字符 |
[ : ] | 截取字符串中的一部分,遵循左闭右开原则,str[0:2] 是不包含第 3 个字符的。 |
in | 成员运算符 - 如果字符串中包含给定的字符返回 True |
not in | 成员运算符 - 如果字符串中不包含给定的字符返回 True |
r/R | 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母 r(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 |
a = "Hello"
b = "Wolrd!"
print("a + b 输出结果:", a + b)
print("a * 3 输出结果:", a * 3)
print("a[1] 输出结果:", a[1])
print("a[1:3] 输出结果:", a[1:3])
if "H" in a:
print("H 在 a中")
else:
print("H 不在 a中")
if "M" not in a:
print("M 不在 a 中")
else:
print("M 在 a 中")
print(r'\n')
print(R'\n')
a + b 输出结果: HelloWolrd!
a * 3 输出结果: HelloHelloHello
a[1] 输出结果: e
a[1:3] 输出结果: el
H 在 a中
M 不在 a 中
\n
\n
字符串格式化
Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
print "My name is %s and weight is %d kg!" % ('张书源', 66)
以上实例输出结果:
My name is 张书源 and weight is 66 kg!
python 字符串格式化符号:
符号 | 描述 |
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %F 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
格式化操作符辅助指令:
符号 | 功能 |
---|---|
* | 定义宽度或者小数点精度 |
- | 用做左对齐 |
+ | 在正数前面显示加号( + ) |
<sp> | 在正数前面显示空格 |
# | 在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') |
0 | 显示的数字前面填充'0'而不是默认的空格 |
% | '%%'输出一个单一的'%' |
(var) | 映射变量(字典参数) |
m.n. | m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
Python 的字符串内建函数
大小写字母转换
string.capitalize() | 新建一个字符串并将字符串第一个字符转成大写。 |
string.casefold() | 新建一个字符串将字符串中所有大写字符转换为小写。 |
string.title() | 新建一个字符串将字符串内的每个单词首字母变大写,其他字母变小写。 |
string.swapcase() | 新建一个字符串将字符串内字母大写变小写,小写变大写。 |
string.upper() | 新建一个字符串将字符串内所有字母变大写。 |
string.lower() | 新建一个字符串将字符串内所有字母变小写。(相比于caseflod,lower只能处理英文字母,caseflod可以处理其他语言字母) |
左中右对齐
string.center(width,fillchar=‘’) | 居中 |
string.ljust(width,fillchar='') | 左对齐 |
string.rjust(width,fillchar='') | 右对齐 |
string.zfill(width) | 右对齐左边补 |
查找
string.count(str,beg=0,end=len(string)) | 返回 str 在 string 里面出现的次数,如果 beg 或者 end 指定则返回指定范围内 str 出现的次数。 |
string.find(str,beg=0,end=len(string)) | 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1。 |
string.rfind(str,beg=0,end=len(string)) | 类似于 find() 函数,返回字符串最后一次出现的位置,如果没有匹配项则返回 -1。 |
string.index(str,beg=0,end=len(string)) | 跟find()方法一样,只不过如果str不在 string中会报一个异常。 |
string.rindex(str,beg=0,end=len(string)) | 类似于 index(),不过是返回最后一个匹配到的子字符串的索引号。 |
替换
expandtabs(tabsize=8) | 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8。 |
string.replace(str1,str2,num=string.count(str1)) | 把 string 中的 str1 替换成 str2,如果 num 指定,则替换不超过 num 次。 |
string.translate(table,del="") | 根据 table 给出的表(包含 256 个字符)转换 string 的字符, 要过滤掉的字符放到 del 参数中 |
#生成转换表格
table=str.maketable("ABCDEFG","1234567")
判断
string.startswith(obj,beg=0,end=len(string)) | 检查字符串是否是以obj开头,如果是则返回 True,否则返回 False。如果参数 beg 和 end 指定值,则在指定范围内检查。 |
string.endswitd(obj,beg=0,end=len(string)) | 检查字符串是否以 obj 结束,如果是则返回 True,否则返回 False。如果参数 beg 和 end 指定值,则在指定范围内检查。 |
string.isupper() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False |
string.islower() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False |
string.istitle() | 如果 string 是标题化的(见 title())则返回 True,否则返回 False |
string.isalpha() | 如果 string 至少有一个字符并且所有字符都是字母则返回 True, 否则返回 False |
string.ascii() | 如果字符串为空或字符串中的所有字符都是 ASCII,则返回 True,否则返回 False。 |
string.isspace() | 如果 string 中只包含空格,则返回 True,否则返回 False. |
string.isprintable() | 判断字符串中所有字符是否都是可打印字符(in repr())或字符串为空。 |
string.isdecimal() | 如果 string 只包含十进制数字则返回 True 否则返回 False. |
string.isdigit() | 如果 string 只包含数字则返回 True 否则返回 False. |
string.isnumeric() | 如果 string 中只包含数字字符,则返回 True,否则返回 False |
string.isalnum() | 如果 string 至少有一个字符并且所有字符都是字母或数字则返 回 True,否则返回 False |
string.isidenifier() | 这个函数的作用是判断字符串是否合法。 |
截取
string.strip(chars=None) | 在 string 上执行 lstrip()和 rstrip() |
strintg.lstrip(chars=None) | 截掉 string 左边的chars,如果为None,则截取空格 |
string.rstrip(chars=None) | 删除 string 字符串末尾的chars,如果为None,则删除空格 |
string.removeprefix(prefix) | 删除指定的前缀prefix |
string.removesuffix(suffix) | 删除指定的后缀suffix |
拆分&拼接
string.partition(str) | 有点像 find()和 split()的结合体,从 str 出现的第一个位置起,把string分成一个3元素的元组 (string_pre_str,str,string_post_str),如果string中不包含str 则string_pre_str == string. |
string.rpatition(str) | 类似于 partition()函数,不过是从右边开始查找 |
string.split(str="",num=string.count(str)) | 以 str 为分隔符切片 string,如果 num 有指定值,则仅分隔 num+1 个子字符串 |
string.rsplit(str="",num=string.count(str)) | 类似于 split()函数,不过是从右边开始查找 |
string.splitlines([keepends]) | 按照行('\r', '\r\n', '\n')分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符。 |
string.join(seq) | 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 |
格式化字符串 :format方法
#按顺序替换{}
a="My name is {} and weight is {} kg!".format('张书源', 66)
#可以自己表明{}替换的下标
b="{1}{0}{1}{0}".format("是","非")
#也可以在{}里标注名称
c="我叫{name},我喜欢{fav}".format(name="张书源", fav="python")