Python标准数据类型-字符串
字符串的定义
- 用单引号 ’ ‘, 双引号" ", 三引号’‘’ ‘’'或 “”" “”"括起来的内容为字符串
- 三引号可以将复杂的字符串进行赋值。
- 三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。
code:
a = "Shang Hai"
b = 'Guang Dong'
c = '''Pu Dong'''
print(a, "---", b, "---", c)
print(type(a), type(b), type(c))
result:
Shang Hai --- Guang Dong --- Pu Dong
<class 'str'> <class 'str'> <class 'str'>
- 单引号 ’ ‘, 双引号" ", 三引号’‘’ ‘’’ 要严格配对,避免歧义
code:
str1 = "It's a dog."
str2 = "It's Lily's dog."
str3 = """It's Lily's dog."""
str4 = '''It's Lily's dog.'''
print(str1, "---", str2, "---", str3, "---", str4)
result:
It's a dog. --- It's Lily's dog. --- It's Lily's dog. --- It's Lily's dog.
- 带歧义的, ‘It’, ‘s dog.’ 配对,中间内容不在字符串内
code:
str1 = 'It's Lily's dog.'
print(str1)
result:
SyntaxError: invalid syntax
- 带歧义的解决方法
– 如果非要使用冲突的引号,就得使用转义字符\来告诉解释器,这不是语句的分隔,只是一个单纯的标点符号
– 外层使用其它引号
code:
str1 = 'It\'s Lily\'s dog.'
print(str1)
result:
It's Lily's dog.
code:
str1 = 'It\'s "Python"' # '只是单纯的标点符号
print(str1)
str2 = "It's \"Python\"" # " "只是单纯的标点符号
str3 = '''It's "Python"'''
print(str1, "---", str2, "---", str3)
result:
It's "Python"
It's "Python" --- It's "Python" --- It's "Python"
字符串的索引和切片
- 从左到右索引默认0开始的,最大范围是字符串长度少1
- 从右到左索引默认-1开始的,直到字符串长度的相反数
索引
通过索引取出字符串对应的值, str[索引值]
code:
str = "I LOVE CHINA."
print(str[0], "---", str[1], "---", str[4]) # str[1]是空格
print(str[-1], "---", str[5], "---", str[-13]) # str[-1]是标点.
result:
I --- --- V
. --- E --- I
切片
通过切片取出字符串的一段字符 str[start:stop:step]
- 结果中包头不包尾
- 默认从左到右,步长为1。
- 步长也可以取负数,表示倒序
- 返回值仍是字符串
str = "I LOVE CHINA."
print(str[:]) #参数均省略时表示取字符串整体
I LOVE CHINA.
print(str[0:5]) #省略step,不包含str[5],step=1
I LOV
print(str[2:6]) #包含str[2],不包含str[6],step=1
LOVE
print(str[:6:2]) #从头开始,不包含str[6],step=2
ILV
print(str[2::2]) #从index=2开始,到结尾,step=2
LV HN.
print(str[::-1]) #从右到左,可以用来倒序排列
.ANIHC EVOL I
print(str[-1:-3:-1])#末尾开始,倒数两个,不包含index=-3
.A
转义字符
在需要在字符中使用特殊字符时,python用反斜杠\转义字符
转义字符 | 描述 |
---|---|
\(在行尾时) | 续行符 |
\\ | 反斜杠符号 |
\’ | 单引号 |
\" | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\f | 换页 |
\n | 换行 |
\r | 将光标定位到当前行的行首,光标后的内容消失 |
\t | 横向制表符 |
\v | 纵向制表符 |
\oyy | 8进制数yy代表的字符,例如:\o12代表换行 |
\xyy | 16进制数yy代表的字符,例如:\x0a代表换行 |
a = 3+\
5
print(a)
8
print("a\\b\\c")
a\b\c
print('a\'bcd\"')
a'bcd"
print('abc\bde')
abde
print('abc\tdef')
abc def
print('abc\x0aef')
abc
ef
print('abcdef\rgh')
gh
原始字符串
原始字符串,以大写R 或 小写r开始,r’',不对特殊字符进行转义
print(r'abc\ndef')
abc\ndef
字符串常用内建函数
方法 | 描述 | 举例 |
---|---|---|
string.capitalize() | 首字符变为大写 | “abc”.capitalize() => ‘Abc’ |
string.center(width, fillchar) | 返回的新字符串string位于中间,长度为width,以fillchar填充 | “abc”.center(15,“-”) => ‘------abc------’ |
string.count(str, beg=0, end=len(string)) | str在string中出现的次数 | “aabcdae”.count(“a”) => 3 |
string.decode(encoding=‘UTF-8’, errors=‘strict’) | 以encoding指定的编码格式解码string,返回string类型 | “中国”.encode(“UTF-8”).decode(“UTF-8”) => ‘中国’ |
string.encode(encoding=‘UTF-8’, errors=‘strict’) | 以 encoding 指定的编码格式编码 string,返回byte类型 | “中国”.encode(“UTF-8”) => b’\xe4\xb8\xad\xe5\x9b\xbd’ |
string.startswith(obj, beg=0,end=len(string)) | 检查字符串是否是以 obj 开头,是则返回 True,否则返回 False。如果beg 和 end 指定值,则在指定范围内检查 | “abc”.startswith(“ab”) => True |
string.endswith(obj, beg=0, end=len(string)) | 检查字符串是否以 obj 结束 | “I love China.”.endswith(“a.”) =>True |
string.find(str, beg=0, end=len(string)) | 检测 str 是否包含在 string 中,返回起始索引或者-1 | I love China.".find(“love”) =>2 |
string.rfind(str, beg=0,end=len(string) ) | 类似于 find() 函数,返回字符串最后一次出现的位置,如果没有匹配项则返回 -1 | “abcdabcd”.rfind(“b”) =>5 |
string.index(str, beg=0, end=len(string)) | 检测 str 是否包含在 string 中,返回起始索引或者异常 | “I love China.”.index(“love”) =>2 |
string.rindex( str, beg=0,end=len(string)) | 类似于 index(),不过是从右边开始 | “love China, love you”.rindex(“love”) =>12 |
string.isalnum() | 如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False | “I 1 Love 2 China”.isalnum() => False “I1Love2China”.isalnum() => True |
string.isalpha() | 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False | “I1Love2China”.isalpha() => False |
string.isdecimal() | 如果 string 只包含十进制数字则返回 True 否则返回 False | “123”.isdecimal() => True |
string.isdigit() | 如果 string 只包含数字则返回 True 否则返回 False.对byte类型也支持 | “14”.encode(“UTF-8”).isdigit() => True |
string.isnumeric() | 对于 Unicode 数字、全角数字(双字节)、罗马数字和汉字数字会返回 True ,其他会返回 False。byte数字(单字节)无此方法 | 123’.isnumeric() => True ‘Ⅷ’.isnumeric() => True “四”.isnumeric() => True |
string.isspace() | 如果 string 中只包含空格,则返回 True,否则返回 False | " ".isspace() => True |
string.istitle() | 检测string中所有的单词拼写首字母是否为大写,且其他字母为小写 | “I Love China.”.istitle() => True |
string.title() | 就是说所有单词都是以大写开始,其余字母均为小写 | “you have only one life”.title() => ‘You Have Only One Life’ |
string.islower() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False | “Abc”.islower() => False |
string.lower() | 转换 string 中所有大写字符为小写 | “12ABde”.lower() => ‘12abde’ |
string.isupper() | 如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False | “ABC”.isupper() => True |
string.upper() | 转换 string 中的小写字母为大写 | “you have only one life”.upper() => ‘YOU HAVE ONLY ONE LIFE’ |
string.join(seq) | 以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串 | “ab”.join([“2”,“3”]) => ‘2ab3’ |
string.ljust(width,fillchar) | 返回一个原字符串左对齐,默认使用空格填充至长度 width 的新字符串 | “abc”.ljust(14,“-”) => ‘abc-----------’ |
string.rjust(width,fillchar) | 返回一个原字符串右对齐,默认使用空格填充至长度 width 的新字符串 | “abc”.rjust(14,“-”) => ‘-----------abc’ |
string.lstrip([chars]) | 截掉 string 左边的空格或字符 | " abc".lstrip() => ‘abc’ |
string.rstrip([chars]) | 截掉 string 右边的空格或字符 | " abc ".rstrip() => ’ abc’ |
string.strip([chars]) | 执行string.lstrip([chars])和string.rstrip([chars]) | “123abc123123”.strip(“123”)=> ‘abc’ |
max(str) | 返回字符串 str 中最大的字符 | max(“AbcfD123”) => ‘f’ |
min(str) | 返回字符串 str 中最小的字符 | max(“AbcfD123”) => min(“AbcfD123”) => ‘1’ |
string.partition(str) | 从 str 出现的第一个位置起,把 字 符 串 string 分 成 一 个 3 元 素 的 元 组 (string_pre_str,str,string_post_str),如果 string 中不包含str 则 string_pre_str == string | “abefabefabef”.partition(“ef”) => (‘ab’, ‘ef’, ‘abefabef’) |
string.rpartition(str) | 类似于 partition()函数,不过是从右边开始查找 | “abefabefabef”.rpartition(“ef”) => (‘abefabefab’, ‘ef’, ‘’) |
string.split(str=“”, num=string.count(str)) | 以 str 为分隔符切片 string,如果 num 有指定值,则仅分隔 num+1 个子字符,返回列表串 | “abc”.split(“b”) => [‘a’, ‘c’] |
string.swapcase() | 翻转大小写 | “ABcdEf”.swapcase() => ‘abCDeF’ |
str.zfill(width) | 返回长度为 width 的字符串,原字符串 string 右对齐,前面填充0 | “abc”.zfill(10) => ‘0000000abc’ |
str.replace(old, new[, max]) | 把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次 | “It is a house”.replace(“is”, “IS”) => ‘It IS a house’ |
Python字符串运算符
操作符 | 描述 | 举例 |
---|---|---|
+ | 字符串连接 | “you” + “and” + “me” => ‘youandme’ |
* | 重复输出字符串 | “666”*3 => ‘666666666’ |
[] [:] | 索引或切片 | “abcd”[1] => ‘b’ |
in, not in | 成员运算符 - 如果字符串中包含给定的字符返回 True | “c” in “abcd” => True |
r/R | 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义 | print(r"abcb\nde") => abcb\nde |
% | 格式字符串 |
Python 字符串格式化占位符%
"%"是Python风格的字符串格式化操作符,非常类似C语言里的print()函数的字符串格式化
格式 | 描述 | 举例 |
---|---|---|
%c | 格式化字符及其ASCII码 | print(“letter: %c” % 97) => letter: a |
%s | 格式化字符串 | print(“word: %s” % “hilarious”) => word: hilarious |
%d | 有符号整数(十进制) | print(“number: %d” % 97) => number: 97 |
%u | 无符号整数(十进制) |