Python基础讲义(二):字符串与运算
字符串与运算
0x01内容导图

0x02字符串的表示与访问
-
字符串:0或多个字符组成的序列,由成对的引号引导(单、双、三引号均可)
-
字符串属于不可变对象,后面介绍的字符串操作结果均是返回副本
-
“\”表示转义字符,常见转义:\n换行,\t横向跳格
-
有序序列,可以按位置访问,专业术语:索引访问
-
Python提供了两套索引,正负索引
- 正索引:正向,从左到右,[0, n-1],注意位置编号从0开始
- 负索引:反向,从右到左,[-n, -1],注意-1表示最后一个元素的位置
-
切片操作:[b:e:s]
- begin:开始位置,包含。默认值与方向相关,如正向,默认左起,头部
- end:结束位置,不包含。默认值与方向相关,如正向,默认左起,尾部
- step:步进及方向,方向决定前面两个参数,如反向,begin表示右起。默认为正1。
代码示例:
>>> "hello" 'hello' >>> """abcd #三引号可支持多行字符串 efghijk lmnopq""" 'abcd\n\tefghijk\n\tlmnopq' >>> s = "abcd" >>> s[0] #索引访问第1个元素 'a' >>> s[-1] #索引访问最后一个元素,负索引 'd' >>> s = "0123456789" >>> s[::2] #取偶数串 '02468' >>> s[1::2] #取奇数串 '13579' >>> s[-1:-5:-1] #反向取 '9876' >>> x = "12321" >>> x == x[::-1] #判断回文串 True
0x03字符串支持的运算
- 加法+:字符串拼接操作,注意左右操作数要求都必须为字符串
- 乘法*:与整数乘(左乘、右乘均可),字符串重复
- in:子串查询操作
代码示例:
>>> x, y = "hello", "world"
>>> x + y
'hello world'
>>> x * 3 #3 * x效果一样
'hellohellohello'
>>> s = "this is a test."
>>> "this" in s
True
>>> "that" in s
False
0x04内置字符串函数
- len(s):获取字符串s字符数
- str(x):将x转换为字符串
- chr(x)/ord(c):unicode编码与字符间的转换
- hex(x)/bin(x)/oct(x):十六进制串、二进制串、八进制串
- eval(s):对表达式串进行求值
代码示例:
>>> s = "12345"
>>> len(s)
5
>>> s + 6 #希望在s后面添加6
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
s + 6
TypeError: must be str, not int
>>> s + str(6)
'123456'
>>> ord('A')
65
>>> chr(97)
'a'
>>> hex(17)
'0x11'
>>> bin(17)
'0b10001'
>>> exp = "print(2+3)"
>>> eval(exp) #理解,首先去掉左右引号,然后把剩下的内容当成Python语句解释执行即可
5
0x05常用字符串对象方法
- 对象方法与函数调用语法上的区别:对象名.方法名()
- upper()/lower():字符串对象大小写转换
- split():字符串分割方法,默认分割字符为空白字符
- replace():替换操作
- find()/index():查找操作,find和index方法在找不到时的处理不同
代码示例:
>>> s = "hello"
>>> s.upper()
'HELLO'
>>> s = "this\nis\ta test"
>>> s.split()
['this', 'is', 'a', 'test']
>>> s = "028-64888001"
>>> s.split("-") #指定分割符
['028', '64888001']
>>> s.replace("8880", "****")
'028-64****01'
>>> s.find("88") #s.index("88"),结果一致
6
>>> s.index("99") #找不到,index会报错
Traceback (most recent call last):
File "<pyshell#42>", line 1, in <module>
s.index("99")
ValueError: substring not found
>>> s.find("99") #找不到,find返回-1
-1
- 格式化方法:format()
- 槽样式:{序号:格式控制},一个槽相当于一个空,需要用后面的参数填充
- 序号表示后面参数,可多次引用;缺省表示按位置匹配
- 格式控制包括:填充、对齐、宽度;千分位;精度;类型
- 类型-整数标记:b,c,d,o,x,X
- 类型-浮点数标记:e,E,f,%
- 格式化字符串:f"{对象:格式控制}"
代码示例:
>>> x, y = 10, 5
>>> "因为{}>{},所以最大值是{}".format(x, y, x) #模板中有3个空,需要3个数来填,缺省序号按位置传递
'因为10>5,所以最大值是10'
>>> "因为{0}>{1},所以最大值是{0}".format(x, y) #使用序号可以多次引用,如0索引表示x
'因为10>5,所以最大值是10'
>>> "{:0>3}".format(y) #右对齐,占3列,不足0填充;左对齐(<)
'005'
>>> "{:-^8}".format(x) #居中对齐,占8列,不足以‘-’填充
'---10---'
>>> x = 12345678.7896
>>> "{:,}".format(x) #加千分位
'12,345,678.7896'
>>> "{:,.2f}".format(x) #加千分位,控制精度(.2f)
'12,345,678.79'
>>> "{:,.2}".format(x) #少了f,就变成科学计数法,2表示有效位数
'1.2e+07'
>>> y = 0.672
>>> "{:.2%}".format(y) #表示百分数
'67.20%'
>>> x = 13
>>> "{:b}".format(x) #格式化为二进制
'1101'
>>> f"{17:x}" #字符串前添加f修饰,表示格式字符串,形式简洁,推荐使用
'11'
>>> f"{x:x}" #冒号前x表示对象13,后面表示16进制的格式标记
'd'
0x06小结
- 熟悉字符串表示及运算,理解字符串对象的不变性
- 熟悉内置字符串函数
- 熟悉字符串对象的常用方法
- 理解格式字符串,基本掌握格式控制
浙公网安备 33010602011771号