Python 简明教程 --- 7,Python 字符串

过早的优化代码是罪恶之源。
—— Donald Knuth

目录

无论哪种编程语言,字符串处理都是最重要的内容之一。当然,Python 也不例外。

1,Python 字符串

这节内容中,我们已经知道了Python 字符串是用以下引号引住的一串字符:

  • 单引号''
  • 双引号""
  • 三单引号'''
  • 三双引号"""

Python3 中的字符串类型统一采用Unicode 编码,因此支持多种语言。

我们这里介绍的字符串类型,指的是<class 'str'>

>>> type('中国')
<class 'str'>
>>> type('abc')
<class 'str'>

2,常用转义字符

在用到某些特殊字符时,需要用到转义字符----反斜杠\

下表是Python 中的一些常用转义字符:

转义字符 含义
\\ 反斜杠
\' 单引号
\" 双引号
\n 换行
\r 回车
\t 横向制表符

3,字符串长度

使用len() 函数可以获取字符串的长度

>>> len('Hello') # 一个英文字符的长度是 1
5
>>> len('Hi')
2
>>> len('Python')
6
>>> len('中国')   # 一个中文字符的长度是 1
2

4,截取字符串

在Python 中可以用中括号[]来截取字符串内容。

获取单个字符

通过下标获取字符串中的单个字符,语法格式如下:

s[n]

其中s 是一个字符串变量,n 为下标,是一个整数,其取值范围为:

-len(s)<=n<=len(s)-1
  • -len(s)<=n<0:从右往左数,取第n 个字符
  • 0<=n<=len(s)-1:从左往右数,取第n+1 个字符

图解:

示例:

>>> s = 'Hello' # 字符换变量 s
>>> len(s)      # s 的长度
5               # 下标n 的范围为 -5<=n<=4
>>> s[-6]       # 超出取值范围,报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>> s[-5]       # 取倒数第5 个字符
'H'
>>> s[-1]       # 取倒数第1 个字符
'o'
>>> s[0]        # 取第1 个字符
'H'
>>> s[4]        # 取最后一个字符
'o'
>>> s[5]        # 超出取值范围,报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

获取部分字符

获取部分字符串的语法格式如下:

s[m:n]

其中s 是一个字符串变量,mn 可以是任意的整数。

s[m:n] 代表的含义是:获取字符串s 下标mn 之间的子串,子串的值包含s[m],而不包含s[n],即遵循左闭右开原则。

图解:

示例:

>>> s = 'Hello'
>>> s[-5:1] 
'H'
>>> s[-7:2]
'He'
>>> s[-3:2]
''
>>> s[0:3]
'Hel'
>>> s[3:1]
''
>>> s[3:-1]
'l'

m 和 n 都可不写

  • 如果不写m,代表从最左边开始
  • 如果不写n,代表到最右边结束

示例:

>>> s = 'Hello'
>>> s[:]        # m 和 n 都不写代表整个字符串
'Hello'  
>>> s[:3]       # 不写 m,代表从最左边开始,直到下标 n
'Hel'
>>> s[2:]       # 不写 n,代表从下标 m开始,直到最右边
'llo'

5,字符串连接

加号+ 运算符可以连接两个字符串

>>> 'abc' + '123'
'abc123'
>>> 'Hi' + '你好'
'Hi你好'

6,重复字符串

一个字符串 乘一个整数n,相当于n 个字符串相连:

>>> 'a' * 5
'aaaaa'
>>> 'abc' * 3
'abcabcabc'
>>> '你好' * 2
'你好你好'

7,字符串包含

运算符in

in 在Python 中是一个运算符,可用于判断一个子串是否包含在一个字符串中:

>>> 'a' in 'abc'
True
>>> 'ab' in 'abc'
True
>>> 'ad' in 'abc'
False

运算符not in

not inin 的反义,用于判断一个子串是否不包含在一个字符串中:

>>> 'a' not in 'abc'
False
>>> 'ab' not in 'abc'
False
>>> 'ad' not in 'abc'
True

8,字符串格式化

Python 字符串支持多种数据类型的格式化,字符串格式化符号见下表:

符号 含义
%c 格式化字符
%s 格式化字符串
%d 格式化整数
%o 格式化八进制数
%x/%X 格式化十六进制数,后者为大写
%f 格式化浮点数
%e 用科学计数法格式化浮点数

示例:

>>> '%c' % 'a'  # 格式化字符
'a'
>>> '%c' % 'B'  # 格式化字符
'B'
>>> '%s' % '中国' # 格式化字符串
'中国' 
>>> '%s' % 'abc' # 格式化字符串
'abc'
>>> '%s' % 123   # 数字类型也可格式化为字符串
'123'
>>> '%d' % 12345 # 格式化数字
'12345'
>>> '%o' % 8     # 格式化八进制数字
'10'
>>> '%o' % 9     # 格式化八进制数字
'11'
>>> '%x' % 10    # 格式化十六进制数字,小写
'a'
>>> '%x' % 11    # 格式化十六进制数字,小写
'b'
>>> '%X' % 10    # 格式化十六进制数字,大写
'A' 
>>> '%X' % 11    # 格式化十六进制数字,大写
'B'
>>> '%f' % 123.123 # 格式化浮点数
'123.123000'
>>> '%e' % 123.123 # 科学计数法格式化浮点数
'1.231230e+02'

宽度与小数点位数

每种格式化符号之前都可以添加m.n

  • mn 都是正整数
  • m 表示格式化的宽度,对于浮点数无效
  • n 表示小数点后的位数,只对浮点数有效

示例:

>>> '%4s' % 'abc'   # 总宽度为 4
' abc'              # 'abc' 之前有 1 个空格
>>> '%5s' % 'abc'   # 总宽度为 5
'  abc'             # 'abc' 之前有 2 个空格
>>> '%5d' % 100     # 总宽度为 5
'  100'             # 100 之前有 2 个空格
>>> '%.5d' % 100    # 总宽度为 5,注意 5 之前有个点
'00100'             # 宽度不够用 0 补齐,所以 100 之前有 2 个 0
>>> '%.2f' % 100.123    # 小数点后保留 2 位,多余位数舍弃
'100.12'
>>> '%.5f' % 100.123    # 小数点后保留 5 位,位数不够,用 0 补齐
'100.12300'

左对齐与右对齐

默认情况下,宽度 不够时,会在左边加空格,这是右对齐

>>> '%5s' % 'abc'  # 宽度为 5,不够用空格补齐,右对齐
'  abc'

可在数字5 之前添加一个负号-宽度 不够时,会在右边加空格,这是左对齐

>>> '%-5s' % 'abc' # 宽度为 5,不够用空格补齐,左对齐
'abc  '

(完。)


推荐阅读:

Python 简明教程 --- 2,第一个Python 程序
Python 简明教程 --- 3,Python 基础概念
Python 简明教程 --- 4,Python 变量与基本数据类型
Python 简明教程 --- 5,Python 表达式与运算符
Python 简明教程 --- 6,Python 控制流

推荐阅读更多精彩内容

  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 3,515评论 13 21
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 3,972评论 0 6
  • 哈里·基恩想和新教练何塞·穆里尼奥建立一种“牢固的关系”,这将有助于托特纳姆更上一层楼。 凯恩在4-2战胜奥林匹亚...
    疯狂SPORTS阅读 1,491评论 0 3
  • 可爱进取,孤独成精。努力飞翔,天堂翱翔。战争美好,孤独进取。胆大飞翔,成就辉煌。努力进取,遥望,和谐家园。可爱游走...
    赵原野阅读 632评论 1 1
  • 在妖界我有个名头叫胡百晓,无论是何事,只要找到胡百晓即可有解决的办法。因为是只狐狸大家以讹传讹叫我“倾城百晓”,...
    猫九0110阅读 558评论 2 3