文字与字串 string
字串是 Python 里最常使用的序列,可以包含字母、数字、符号、标点甚至空格、换行,这篇教学会介绍文字与字串基本的用法。
快速导览:建立字串、转义、前方加上 r、结合字串、重复字串、取得字元与字串、len() 取得字串长度、split() 拆分、replace() 替换、strip() 剥除、搜索和选择、大小写
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
建立字串
使用将字元 ( 字母、符号或数字 ) 放在一对“单引号”或“双引号”里,就可制作为一个 Python 字串。
print("hello") # hello
print('hello') # hello
单引号和双引号可以互相搭配使用,当单引号被双引号包覆时,单引号为字串,当双引号被单引号包覆时,双引号为字串。
print("'oxxo' is my name") # 'oxxo' is my name
print('"oxxo" is my name') # "oxxo" is my name
如果是“多行字串”( 文字很多且会换行 ),则可将多行字串,放在“连续三个”单引号或双引号里,就会原封不动的印出结果。
a = """Millions of developers and companies build,
ship, and maintain their software on GitHub—the
largest and most advanced development platform
in the world."""
print(a)
此外,也可以使用“str()”,将数据转换成字串,下方的程序将数字 123 转换为字串 123。
a = str(123)
print(a) # '123'
转义
“转义”表示“转换字串内一些字元的含义”,只要在需要转换的字元前方,加上“反斜线 \”,就能赋予其特殊意义,常用的转义字元有下面几种:
| 转义字元 | 说明 |
|---|---|
\( 放在一行结尾 ) |
接续下一行 |
\\ |
显示反斜线 |
\' |
显示单引号 |
\" |
显示双引号 |
\b |
删除前一个字元 |
\n |
换行 |
\t |
tab 键 |
下方的例子,在一行字串里,使用转义字元,让结果同时显示单引号、双引号和反斜线。
a = 'hello "World", my name is \'oxxo\', \\_\\'
print(a)
# hello "World", my name is 'oxxo', \_\
下方的例子,将一行文字根据“\n”进行换行。
a = 'hello World,\nmy name is oxxo,\nhow are you?'
print(a)
# hello World,
# my name is oxxo,
# how are you?
前方加上 r
如果在字串的前方加上“r”,表示这个字串为“raw string”,不要进行转义,下方的程序码执行后,a 会印出“\n”( 因为不进行转义 ),b 则会将 \n 转义为换行,就会印出换行的结果。
a = r'123\n456'
b = '123\n456'
print(a) # 123\n456
print(b)
# 123
# 456
结合字串
结合字串有三种方式:“+ 号、字串后方放置、括号”,结合的字串“不会加上空格”,所以空格要自己补上。
使用“+ 号”可以针对“变数”与“字串”进行结合。
a = 'hello'
b = ' world' # 前方補上空格
c = a + b + '!!!'
print(c)
# hello world!!!
使用“字串后方放置”只能针对“字串”( 不是变数 ) 进行结合。
a = 'hello' ' world' '!!!'
print(a)
# hello world!!!
如果有很多字串,可以将其放在“括号”里进行结合。
a = ('a' "b" 'c' "'" 'ok' "'")
print(a)
# abc'ok'
重复字串
在字串后方使用“*”加上数字,可以指定该字串要重复几次,下方的例子,会将 ok 重复 10 次。
a = 'ok'*10
print(a)
# okokokokokokokokokok
如果变数是字串,也可以使用 * 进行重复,下图的例子,会出现 20 个 ok。
a = 'ok'*5
b = a * 4
print(b)
# okokokokokokokokokokokokokokokokokokokok
取得字元与字串
使用“ [ ] ”可以取得某个字元 ,因为每个字元在字串中都有各自的“顺序 offset”,从左边数来第一个顺序为 0,接下来是 1,如果指定 -1 则会选择最右边的字元,-2 则是右边数来的第二个,依此类推。
a = 'hello world'
print(a[0]) # h ( 第一個字元 )
print(a[3]) # l ( 第四個字元 )
print(a[-1]) # d ( 最後一個字元 )
如果要取得某一串文字,可以使用“slice”的方式,定义 slice 的方式为一组方括号、一个 start ( 开始顺序 )、一个 end ( 结尾顺序 ) 和一个中间的 step ( 间隔 ),常见的规则如下:
| 定义 | 说明 |
|---|---|
| [ : ] | 取出全部字元,从开始到结束 |
| [ start: ] | 取出从 start 的位置一直到结束的字元 |
| [ :end ] | 取出从开始一直到 end 的“前一个位置”字元 |
| [ start:end ] | 取出从 start 位置到 end 的“前一个位置”字元 |
| [ start:end:step ] | 取出从 start 位置到 end 的“前一个位置”字元,并跳过 step 个字元 |
a = '0123456789abcdef'
print(a[:]) # 0123456789abcdef ( 取出全部字元 )
print(a[5:]) # 56789abcdef ( 從 5 開始到結束 )
print(a[:5]) # 01234 ( 從 0 開始到第 4 個 ( 5-1 ) )
print(a[5:10]) # 56789 ( 從 5 開始到第 9 個 ( 10-1 ) )
print(a[5:-3]) # 56789abc ( 從 5 開始到倒數第 4 個 ( -3-1 ) )
print(a[5:10:2]) # 579 ( 從 5 開始到第 9 個,中間略過 2 個 )
len() 取得字串长度
len() 函数可以取得一串字串的长度 ( 总共几个字元 ),取得的长度不包含转义字元,下方的例子会显示变数 a 的字串长度。
a = '0123456789_-\\\"\''
print(len(a)) # 15,不包含三個反斜線 \
split() 拆分
split() 函数可以将一个字串,根据指定的“分隔符号”,拆分成“串列” ( 串列就是许多值组成的序列,将许多值包覆在方括号里,并使用逗号分隔 )。
a = 'hello world, I am oxxo, how are you?'
b = a.split(',') # 以逗號「,」進行拆分
c = a.split(' ') # 以空白字元「 」進行拆分
d = a.split() # 如果不指定分隔符號,自動以空白字元進行拆分
print(b) # ['hello world', ' I am oxxo', ' how are you?']
print(c) # ['hello', 'world,', 'I', 'am', 'oxxo,', 'how', 'are', 'you?']
print(d) # ['hello', 'world,', 'I', 'am', 'oxxo,', 'how', 'are', 'you?']
replace() 替换
replace() 函数可以进行简单的字串替换,replace() 函数有三个参数“旧的字串,新的字串,替换的数量”,如果没有指定数量,就会将内容所有指定的字串替换成新的字串。
如果要进行更复杂规则的取代,就必须要使用“正规表达式”。
a = 'hello world, lol'
b = a.replace('l','XXX')
c = a.replace('l','XXX',2)
print(b) # heXXXXXXo worXXXd, XXXoXXX ( 所有的 l 都被換成 XXX )
print(c) # heXXXXXXo world, lol ( 前兩個 l 被換成 XXX )
strip() 剥除
strip() 函数可以去除一段字串开头或结尾的某些字元,使用 rstrip() 函数可以只去除右边,使用 lstrip() 函数可以只去除左边,括号内可以填入指定的字元,就会将开头或结尾指定的字元剥除。
a = ' hello!!'
b = a.strip()
e = a.strip('!')
c = a.lstrip()
d = a.rstrip()
print(b) # hello!!
print(c) # hello!!
print(d) # hello!!
print(e) # hello
搜索和选择
如果要搜索字串中的某个字,可以使用“find()”或“index()”两个函数,函数默认从左侧开始找起,找到指定的字串或字元时,会回传第一次出现的位置 ( offset ),如果改成“rfind()”或“rindex()”就会从右侧找起,找到指定的字串或字元时,会回传最后一次出现的位置 ( offset ),如果没有找到结果,find() 会回报 -1 的数值,index() 会直接显示错误消息。
a = 'hello world, I am oxxo, I am a designer!'
b = a.find('am')
c = a.rfind('am')
print(b) # 15 ( 第一個 am 在 15 的位置 )
print(c) # 26 ( 最後一個 am 在 26 的位置 )
下方列出一些好用的搜索与选择函数:
| 函数 | 说明 |
|---|---|
| startswith() | 判断开头字串,符合 True,不符合 False |
| endswith() | 判断结尾字串,符合 True,不符合 False |
| isalnum() | 判断是否只有字母和数字,符合 True,不符合 False |
| count() | 计算字串出现了几次 |
a = 'hello world, I am oxxo, I am a designer!'
b = a.startswith('hello')
c = a.endswith('hello')
d = a.isalnum()
e = a.count('am')
print(b) # True ( 開頭是 hello )
print(c) # False ( 結尾不是 hello )
print(d) # False ( 裡面有逗號和驚嘆號 )
print(e) # 2 ( 出現兩次 am )
大小写
Python 针对字串的大小写,有四种内建的转换函数可以使用:
| 函数 | 说明 |
|---|---|
| title() | 单字字首字母变大写 |
| upper() | 所有字母变大写 |
| lower() | 所有字母变小写 |
| swapcase() | 单字字母的大小写对调 |
a = 'Hello world, I am OXXO'
b = a.title()
c = a.upper()
d = a.lower()
e = a.swapcase()
print(b) # Hello World, I Am Oxxo
print(c) # HELLO WORLD, I AM OXXO
print(d) # hello world, i am oxxo
print(e) # hELLO WORLD, i AM oxxo
微信扫码关注
抖音扫码关注