Python 简明教程 --- 7,Python 字符串
微信公众号:码农充电站pro
个人主页:https://codeshellme.github.io
过早的优化代码是罪恶之源。
—— 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 是一个字符串变量,m 和 n 可以是任意的整数。
s[m:n] 代表的含义是:获取字符串s 下标m 到 n 之间的子串,子串的值包含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 in 是in 的反义,用于判断一个子串是否不包含在一个字符串中:
>>> '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:
m与n都是正整数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 简明教程 --- 4,Python 变量与基本数据类型
Python 简明教程 --- 5,Python 表达式与运算符
欢迎关注作者公众号,获取更多技术干货。

Python 简明教程 --- 7,Python 字符串的更多相关文章
- Python 简明教程 --- 8,Python 字符串函数
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 好代码本身就是最好的文档.当你需要添加一个注释时,你应该考虑如何修改代码才能不需要注释. -- St ...
- 【笔记】Python简明教程
Python简明教程,此资源位于http://woodpecker.org.cn/abyteofpython_cn/chinese/ s=u'中文字符' #u表示unicode,使用u之后能正常显示中 ...
- python简明教程
Python简明教程 MachinePlay关注 0.7072018.09.26 01:49:43字数 2,805阅读 9,287 Python一小时快速入门 1.Python简介 pylogo. ...
- Python 简明教程 --- 3,Python 基础概念
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 控制复杂性是计算机编程的本质. -- Brian Kernighan 了解了如何编写第一个Pytho ...
- Python 简明教程 --- 2,第一个Python 程序
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果你发现特殊情况太多,那你肯定是用错方法了. -- Carig Zerouni 当你在自己的电脑上 ...
- Python 简明教程 --- 13,Python 集合
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果代码和注释不一致,那很可能两者都错了. -- Norm Schryer 目录 前几节我们已经介绍 ...
- Python 简明教程 --- 14,Python 数据结构进阶
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果你发现特殊情况太多,那很可能是用错算法了. -- Carig Zerouni 目录 前几节我们介 ...
- Python 简明教程 --- 15,Python 函数
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 测试只能证明程序有错误,而不能证明程序没有错误. -- Edsger Dijkstra 目录 本节我 ...
- Python 简明教程 --- 17,Python 模块与包
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 正确的判断来源于经验,然而经验来源于错误的判断. -- Fred Brooks 目录 我们已经知道函 ...
随机推荐
- Netty源码学习系列之1-NioEventLoopGroup的初始化
前言 NioEventLoopGroup是netty对Reactor线程组这个抽象概念的具体实现,其内部维护了一个EventExecutor数组,而NioEventLoop就是EventExecuto ...
- 非阻塞赋值(Non-blocking Assignment)是个伪需求
https://mp.weixin.qq.com/s/mH84421WDGRb7cuU5FEFIQ Verilog的赋值很是复杂,包括: 1. Continuous assignment; 2. Pr ...
- flex布局以及常用属性。
(1)flex布局排列 会消除块状属性,所有与块状相关的属性将失效,比如块状元素会独占一行,如图2,设置flex后会在一行排列
- Java实现 LeetCode 面试题62. 圆圈中最后剩下的数字(约瑟夫环)
面试题62. 圆圈中最后剩下的数字 0,1,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字. 例如,0.1.2.3.4这5个数字组成一个圆 ...
- Java实现 LeetCode 563 二叉树的坡度(又是一个遍历树)
563. 二叉树的坡度 给定一个二叉树,计算整个树的坡度. 一个树的节点的坡度定义即为,该节点左子树的结点之和和右子树结点之和的差的绝对值.空结点的的坡度是0. 整个树的坡度就是其所有节点的坡度之和. ...
- Java实现 蓝桥杯 算法提高 最大乘积
算法提高 最大乘积 时间限制:1.0s 内存限制:512.0MB 提交此题 问题描述 对于n个数,从中取出m个数,如何取使得这m个数的乘积最大呢? 输入格式 第一行一个数表示数据组数 每组输入数据共2 ...
- Java实现 蓝桥杯VIP 算法提高 3-2求存款
算法提高 3-2求存款 时间限制:1.0s 内存限制:256.0MB 问题描述 见计算机程序设计基础(乔林)P50第5题. 接受两个数,一个是用户一年期定期存款金额,一个是按照百分比格式表示的利率,计 ...
- java中ThreadLocal类的详细介绍(详解)
ThreadLocal简介 变量值的共享可以使用public static的形式,所有线程都使用同一个变量,如果想实现每一个线程都有自己的共享变量该如何实现呢?JDK中的ThreadLocal类正是为 ...
- Java实现第十届蓝桥杯旋转
试题 F: 旋转 时间限制: 1.0s 内存限制: 512.0MB 本题总分:15 分 [问题描述] 图片旋转是对图片最简单的处理方式之一,在本题中,你需要对图片顺时 针旋转 90 度. 我们用一个 ...
- Java实现第九届蓝桥杯倍数问题
倍数问题 题目描述 [题目描述] 众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数.但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼.现在小葱给了你 n 个数,希望你从这 n ...