上一章Python教程请查看:python3元组tuple
在本教程中,你将学习如何用Python创建、格式化、修改和删除字符串,此外,还将介绍各种字符串操作和函数。
Python中的字符串是什么?字符串是字符序列。
一个字符只是一个符号。例如,英语有26个字符。
计算机不处理字符,它们处理数字(二进制)。尽管你可能在屏幕上看到字符,但在内部,它是作为0和1的组合存储和操作的。
这种字符到数字的转换称为编码,而相反的过程称为解码,ASCII和Unicode是一些常用的编码。
在Python中,字符串是Unicode字符的序列,引入Unicode是为了包括所有语言中的所有字符,并带来编码的一致性。
如何在Python中创建字符串?字符串可以通过在单引号或双引号中包含字符来创建,甚至在Python中也可以使用三重引号,但通常用于表示多行字符串和文档字符串。
# 下面这些都是等价的
my_string = 'Hello'
print(my_string)my_string = "Hello"
print(my_string)my_string = '''Hello'''
print(my_string)# 三重引号字符串可以扩展多行
my_string = """Hello, welcome to
the world of Python"""
print(my_string)
如何访问字符串中的字符?我们可以使用索引访问单个字符,使用切片访问一系列字符。Index从0开始,图访问超出索引范围的字符将引发一个IndexError,索引必须是整数,我们不能使用浮点数或其他类型,这将导致类型错误。
Python允许对它的序列进行负索引。
下标-1表示最后一项,下标-2表示倒数第二项,依此类推。我们可以使用切片操作符(冒号)来访问字符串中的一系列项。
str = 'srcmini'
print('str = ', str)#第一个字符
print('str[0] = ', str[0])#最后一个字符
print('str[-1] = ', str[-1])#切割2到5个字符
print('str[1:5] = ', str[1:5])#切割6到导数第二个字符
print('str[5:-2] = ', str[5:-2])
如果我们试图访问范围外的索引或使用十进制数,我们将得到如下错误。
# 索引必须在范围内
>>> my_string[15]
...
IndexError: string index out of range
# 索引必须是整数
>>> my_string[1.5]
...
TypeError: string indices must be integers
通过将索引考虑到如下所示的元素之间,切片可以得到最佳的可视化效果。
如果我们想要访问一个范围,我们需要从字符串中切片的索引。
文章图片
如何更改或删除字符串?字符串是不可变的。这意味着一个字符串的元素一旦被赋值就不能被改变,我们可以简单地将不同的字符串重新分配到相同的名称。
>>> my_string = 'srcmini'
>>> my_string[5] = 'a'
...
TypeError: 'str' object does not support item assignment
>>> my_string = 'Python'
>>> my_string
'Python'
我们不能从字符串中删除或删除字符,但是使用关键字del完全删除字符串是可能的。
>>> del my_string[1]
...
TypeError: 'str' object doesn't support item deletion
>>> del my_string
>>> my_string
...
NameError: name 'my_string' is not defined
Python字符串操作字符串可以执行许多操作,这使得它成为Python中最常用的数据类型之一。
两个或多个字符串的连接
将两个或多个字符串连接成一个字符串称为连接。
+运算符在Python中就是这样做的,简单地将两个字符串字面值写在一起也会将它们连接起来。
可以使用*操作符重复给定次数的字符串。
str1 = 'Hello'
str2 ='World!'# 使用 +
print('str1 + str2 = ', str1 + str2)# using *
print('str1 * 3 =', str1 * 3)
将两个字符串字面值写在一起也会像+运算符一样将它们串联起来。
如果要将字符串连接到不同的行,可以使用括号。
>>> # 两个字面量字符串
>>> 'Hello ''World!'
'Hello World!'
>>> # 使用括号
>>> s = ('Hello '
...'World')
>>> s
'Hello World'
遍历字符串
使用for循环,我们可以遍历一个字符串,下面是一个计算字符串中“l”数目的示例。
count = 0
for letter in 'Hello World':
if(letter == 'l'):
count += 1
print(count,'个')
字符串成员测试
我们可以使用关键字in来测试子字符串是否存在于字符串中。
>>> 'a' in 'program'
True
>>> 'at' not in 'battle'
False
使用Python的内置函数
可以使用sequence和string的各种内置函数。
一些常用的是enumerate()和len(),这些函数的作用是:返回一个枚举对象,它以对的形式包含字符串中所有项的索引和值,这对于迭代很有用。
类似地,len()返回字符串的长度(字符数)。
str = 'cold'# enumerate()
list_enumerate = list(enumerate(str))
print('list(enumerate(str) = ', list_enumerate)#字符总数
print('len(str) = ', len(str))
Python字符串格式化转义序列
如果我们想打印一个文本He said, “ What’ s there?” -我们不能使用单引号或双引号,这将导致SyntaxError,因为文本本身包含单引号和双引号。
>>> print("He said, "What's there?"")
...
SyntaxError: invalid syntax
>>> print('He said, "What's there?"')
...
SyntaxError: invalid syntax
解决这个问题的一个方法是使用三重引号,或者,我们可以使用转义序列。
转义序列以反斜杠开始,并以不同的方式解释。如果我们使用单引号来表示一个字符串,那么字符串中的所有单引号都必须转义,类似的情况还有双引号。下面是如何表示上面的文本。
# 使用三引号
print('''He said, "What's there?"''')# 转义单引号
print('He said, "What\'s there?"')# 转义双引号
print("He said, \"What's there?\"")
下面是Python支持的所有转义序列的列表。
Python中的转义序列
转义序列 | 说明 |
\newline | 忽略反斜杠和换行 |
\\ | 反斜杠 |
\’ | 单引号 |
\” | 双引号 |
\a | ASCII贝尔 |
\b | ASCII退格 |
\f | ASCII跳页 |
\n | ASCII换行 |
\r | ASCII回车 |
\t | ASCII水平选项卡 |
\v | ASCII垂直制表符 |
\ooo | 带有八进制值ooo的字符 |
\xHH | 字符带有十六进制值HH |
>>> print("C:\\Python32\\Lib")
C:\Python32\Lib
>>> print("AAA\nBBB")
AAA
BBB
>>> print("This is \x48\x45\x58")
This is HEX
忽略转义序列的原始字符串
有时我们可能希望忽略字符串中的转义序列,我们可以把r放在弦的前面,这将意味着它是一个原始字符串,其中的任何转义序列都将被忽略。
>>> print("This is \x61 \ngood example")
This is a
good example
>>> print(r"This is \x61 \ngood example")
This is \x61 \ngood example
格式化字符串的format()方法
与string对象一起使用的format()方法非常通用,并且在格式化字符串方面功能非常强大,格式字符串包含大括号{}作为占位符或被替换的替换字段。
我们可以使用位置参数或关键字参数来指定顺序。
# 默认(默认)顺序
default_order = "{}, {} and {}".format('A','B','S')
print('\n--- 默认的顺序 ---')
print(default_order)# 使用位置参数的顺序
positional_order = "{1}, {0} and {2}".format('A','B','S')
print('\n--- 位置顺序 ---')
print(positional_order)# 使用关键字参数的顺序
keyword_order = "{s}, {b} and {a}".format(j='A',b='B',s='S')
print('\n--- 关键字顺序 ---')
print(keyword_order)
format()方法可以有可选的格式规范。它们使用冒号与字段名分隔,例如,我们可以在给定的空间内左对齐< ,右对齐> 或center ^字符串。我们还可以将整数格式化为二进制、十六进制等,浮点数可以四舍五入或以指数格式显示,有大量的格式可以使用。
>>> # 格式化整数
>>> " {0}的二进制表示为 {0:b}".format(12)
' 12的二进制表示为 1100'
>>> # 格式化浮点数
>>> "指数表示: {0:e}".format(1566.345)
'指数表示: 1.566345e+03'
>>> # round off
>>> "三分之一是: {0:.3f}".format(1/3)
'三分之一是: 0.333'
>>> # 字符串对齐
>>> "|{:<
10}|{:^10}|{:>10}|".format('butter','bread','ham')
'|butter|bread|ham|'
旧式的格式
我们甚至可以格式化字符串,如C编程语言中使用的旧sprintf()样式。我们使用%操作符来完成此操作。
>>> x = 12.3456789
>>> print('X的值是:%3.2f' %x)
X的值是:12.35
>>> print('X的值是:%3.4f' %x)
X的值是:12.3457
常用的Python字符串方法【python3字符串string – Python3教程】string对象有许多可用的方法。上面提到的format()方法就是其中之一。常用的方法有lower()、upper()、join()、split()、find()、replace()等。下面是Python中处理字符串的所有内置方法的完整列表。
>>> "Srcmini".lower()
'srcmini'
>>> "Srcmini".upper()
'SRCMINI'
>>> "a b c".split()
['a', 'b', 'c']
>>> ' '.join(['a', 'b', 'c'])
'abc'
>>> 'Happy New Year'.find('ew')
7
>>> 'Happy New Year'.replace('Happy','Brilliant')
'Brilliant New Year'
推荐阅读
- python3字典dictionary – Python3教程
- python3元组tuple – Python3教程
- python3列表list – Python3教程
- python3数字,类型转换和数学 – Python3教程
- python3包(package)和模块(module) – Python3教程
- python3模块 – Python3教程
- python3全局关键字global – Python3教程
- python3全局变量、局部变量和非局部变量 – Python3教程
- python3匿名函数和Lambda函数 – Python3教程