字符串Strings

字符串字面量String Literals

基本款

用单引号,双引号引起来的都是字符串

1 2 3 4 5 6 7
s = "zzax.io"print(type(s))print(s) s = 'zzax.io'print(type(s))print(s)

就想在字符串里出现引号

双引号里不能有双引号,单引号里不能有单引号

1!
s = ' it's '
纠正

换另外一个就好

1
s = " it's "

空字符串

一般字符串

字符串里可以没有文字

1
s = "zzax"
空字符串

字符串里可以没有文字

1
s = ""

需要跟 另外一个东西区分开

1
s = None

多行字符串

使用 三个 双引号 或者 单引号 作为 开始和结束

1 2 3 4 5 6 < < < < <
s = """doc.zzax.io 棒呆的技术文档 ^_^ 哈哈"""print(s) doc.zzax.io 棒呆的技术文档 ^_^

字符串 与 字符Strings and Characters

字符串是字符列表

字符串其实是字符列表,只不过,不能 append 也不能 改

使用 index 访问字符
1 2
name = 'zzax'print(name[0])
使用 for 语句
1 2 3
name = 'zzax'for c in name: print(c)

字符本质

一本字典

每页有一个字

存储页数

标准

ASCII 表

远古小字典

Unicode 表

地球大字典

字符 与 字符编码

字符 转 字符编码
1 2
page_number = ord('z')print(page_number)
字符编码 转 字符
1 2
c = chr(90)print(c)

特殊字符Special Characters

单双引号问题

问题

无论使用双引号,还是单引号,都 无法表达 内容里 同时有 单引号和双引号

1!2!
s = " single quote ' and double quote " "s = ' single quote ' and double quote " '
解决方案
1 2
s = " single quote ' and double quote \" "s = ' single quote \' and double quote " '

转义字符Escape Character

\
作用

能解除 右侧字符的语法意义

能转移 右侧字符的本身意义

\ + 语法意义的" -> 没有语法意义的"
\ + 语法意义的' -> 没有语法意义的'
\ + 用于转义的\ -> 没有转义功能的\

换行符

\ + n -> 换行符
效果

换行

案例
1 < < <
print("a\nb")ab
检查

print 方法 传参

制表符

\ + t -> 制表符
效果

补充空格 到 4的倍数的列数

4 这个数 可以被改成别的,取决于编辑器

案例
1 2 3 4 < < < < <
print("a\tb")print("aa\tbb")print("aaa\tbbb")print("aaaa\tbbb")a baa bbaaa bbbaaaa bbbb

制表符与空格

敲代码时,按 tab

有些 编辑器,敲进去的是 空格

有些 编辑器,敲进去的是 制表符

肉眼是无法区分的

案例
1 2 < < <
print("a\tb")print("a b")a ba b

字符串 切割String Slicing

slice

使用 slice 函数,可以构建 slice

1 2 3
s = slice(0, 2)print(type(s))print(s)

使用 slice 切割字符串

1 2 =
s = slice(0, 2)sub_string = "zzax"[s]'zz'

slice 参数

slice 有三个参数,分别是 开始,结束,和间距

1 2 =
s = slice(1, None)sub_string = "zzax"[s]'zax'
1 2 =
s = slice(None, None, 2)sub_string = "abcdef"[s]'ace'

slice 缩写

slice 传入 中括号语法时,可以缩写

1 =
sub_string = "port"[1]'o'
1 =
sub_string = "port"[1:]'ort'
1 =
sub_string = "port"[:1]'p'
1 =
sub_string = "port"[1:3]'or'
1 =
sub_string = "port"[::2]'pr'

挑战

日期分析

将一个 符合 ISO 8601 标准的日期 的字符串,拆分出 年月日

> < < <
2019-01-0120190101

列表切割

切割的语法 也可以用于 list 中

1 2 =
l = [6, 7, 3, 8, 4]sub_list = l[::2][6, 3, 4]

字符串 字符操作

s.isalpha()

返回 s 是不是文字构成的

1 2 =
s = 'a'test = s.isalpha()True

s.islower()

返回 s 是不是小写字母构成的

1 2 =
s = 'a'test = s.islower()True

s.isupper()

返回 s 是不是大写字母构成的

1 2 =
s = 'a'test = s.isupper()False

s.lower()

生成并返回一个新的字符串,内容是 s 变为小写后的

1 2 =
s = 'a's = s.lower()'a'

s.upper()

生成并返回一个新的字符串,内容是 s 变为大写后的

1 2 =
s = 'a's = s.upper()'A'

s.isdecimal()

返回 s 是不是 数字 构成的

1 2 =
s = '1'test = s.isdecimal()True

挑战

大小写格式化

输入一个单词,把它变成大写开头的命名格式

> <
chAR Char
数值特性分析

分析一个字符串是不是整数,包括负数

> <
-26True

字符串 查找子元素

s.find(sub)

返回 s 第一次出现的 sub 的 位置的索引

1 2 =
s = "/doc/page.html"index = s.find("/")0

s.find(sub, start)

返回 s 从 start 开始,出现的 sub 的 位置的索引

1 2 =
s = "/doc/page.html"index = s.find("/", 1)4

s.rfind(sub)

从右往左,返回 s 第一次出现的 sub 的 位置的索引

1 2 =
s = "/doc/page.html"index = s.rfind("/")4

挑战

数据提取

将一个用括号括起来的负数,中的数据取出来

> <
(10.11)10.11
日期分析

将一段中文日期中的关键信息提取出来,

注意 月份和日期 不会固定是 2位数

> < < <
2019年1月1日201911
> < < <
2019年11月11日20191111

字符串 刮除

s.strip()

返回一个新的字符串,内容是原始字符串消掉两边多余的空格

1 2 =
s = " hi ha "trimmed_str = s.strip()"hi ha"

挑战

坐标

一个消息里有个坐标信息,格式为

"x, y"

根据坐标信息,把里面的值扣出比一比,x 和 y 哪个更长

> <
1, 2x < y

字符串 格式化构建Format String

对比

使用前
1 2 3
x = 1y = 2location = '(x: ' + str(x) + ', y: ' + str(y) + ')'

字符串被拆分成了多个碎片

可读性非常差

使用后
1 2 3 4
x = 1y = 2template = '(x: {}, y: {})'location = template.format(x, y)

完形填空

准备一个模板,然后填充动态数据

指名

format 后面指名,在 template 里就可以使用名字

1 2
template = '(x: {x}, y: {y})'location = template.format(x=1, y=2)

这样也是对的

1 2
template = '(x: {x}, y: {y})'location = template.format(y=2, x=1)

指出顺序

1 2
template = '(x: {0}, y: {0})'location = template.format(1, 2)

设置宽度

左对齐,右侧补空格
1 =
text = '{:<10}'.format(9917)'9917 '
右对齐,左侧补空格
1 =
text = '{:>10}'.format(9917)' 9917'
居中对齐,两侧补空格
1 =
text = '{:^10}'.format(9917)' 9917 '
右对齐,左侧补0
1 =
text = '{:0>10}'.format(9917)' 9917 '
混合
1 =
text = '{0:>10} vs {1:<10}'.format(97, 110)' 97 vs 110 '

小数整理

1 =
text = '{:.2f}'.format(11.0)'11.00'
混合使用
1 =
text = '{:>10.2f}'.format(11.0)' 11.00'

挑战

格式化显示

给一系列的值,把它们按格式打印出来

1 2 < < < < <
scores = [3.1, 20.98, -5.7, 6.2, 3.0]... 3.10 20.98 -5.70 6.20 3.00

字符串 插值String Interpolation

对比

使用前
1 2 3 4
x = 1y = 2template = '(x: {}, y: {})'location = template.format(x, y)
使用后
1 2 3
x = 1y = 2location = f'(x: {x}, y: {y})'

更清爽

挑战

日期格式转换

将 ISO 8601 格式的日期,转为 年月日格式

> <
2019-01-012019 年 1 月 1 日

字符串 APIString API

Python String API

Python String 文档

ZZAX 微信公众

文档一更新,立刻告诉你