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小结

  • 熟悉字符串表示及运算,理解字符串对象的不变性
  • 熟悉内置字符串函数
  • 熟悉字符串对象的常用方法
  • 理解格式字符串,基本掌握格式控制
posted @ 2020-11-16 09:31  hzy&hmcj  阅读(321)  评论(0)    收藏  举报