字符串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 文档