字符串是最常见的一种数据类型,在现实生活中,比较适合用字符串表示的对象包括名字、诗词等。字符串表示一组有序的字符集合,如“床前明月光”就是一个字符串,“床”和“前”都是字符。
所以字符串最基本的属性就是长度,就是包含字符的个数。和其他语言类似,在 Python 中,长度为 0 的字符串也是合法的,也被称作空字符串。但和C语言、Java 语言不同的是,Python 中没有字符这个类型,或者我们可以认为字符就是长度为 1 的字符串。
在 Python 2 中,有两类字符串:
而在 Python 3 中,只有 str 一种类型,但该类型就是 Python 2 中的 unicode 类型,我们可以用其表示任意字符。原来 Python 2 中的 str 类型在 Python 3 中用 bytes 类型表示。
本节主要讲述 Python 3 中字符串的用法。
字符串可以使用下面 4 种方式来表示:
下面是各种字符串表示法的例子:
>>> a = '' # 使用单引号,空字符串 >>> a = 'abc' # 使用单引号,包含3个字符,a、b和c >>> a = "" # 使用双引号,空字符串 >>> a = "abc" # 使用双引号,包含3个字符,a、b和c >>> a = """""" # 使用3个双引号,空字符串 >>> a = """abc""" # 使用3个双引号,包含3个字符,a、b和c >>> a = """abc # 使用3个双引号,包含换行符 def # 第二行 ekl""" # 第三行 >>> a # 查看内容 'abc\ndef\nekl' >>> a = '''abc # 使用3个单引号,包含换行符 def # 第二行 ijl''' # 第三行 >>> a # 查看内容,可以看到换行符\n 'abc\ndef\nijl'
字符串的基本操作包括得到子字符串、得到字符串的长度等。本节将介绍字符串类型的常用接口函数以及它们的用法。
其返回字符串中字符的个数。
>>> len("") # 空字符串,长度为0 0 >>> len("a") # 单个字符,所以长度为1 1 >>> len("ab") # 包含两个字符,所以长度为2 2 >>> len("abc") # 包含3个字符,所以长度为3 3 >>> a = "我爱python" >>> len(a) # 包括8个字符 8
需要注意的是,字符串是不可以修改的,所以对子字符串是只能读不能写。
>>> in_str="abcdefghijklmn" >>> in_str[2:] # 从第三个开始一直到最后 'cdefghijklmn' >>> in_str[2] # 仅第三个字符 'c' >>> in_str[2:5] # 第3个到第5个字符 'cde' >>> in_str[2:5]="1234" # 试图做写操作,失败,抛出异常 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment
如果字符串包含多个字符,那么是否所有的字符都是26个字母,包括大小写的字母。
>>> "".isalpha() # 空字符串不是26个字母 False >>> "a".isalpha() # "a"包含的都是26个字母 True >>> "a1".isalpha() False >>> "aB".isalpha() True
该函数用于判断是否所有的字符都是 0 到 9 的字符,如果有一个不是,返回 False,否则返回 True。
>>> "".isdigit() # 空字符返回False False >>> "0".isdigit() # 单个字符0,返回True True >>> "0a".isdigit() # 包含非数字字符a,返回False False >>> "009876".isdigit() # 全部为数字字符,返回True True
如果字符串中的每个字符都是 26 个字母或者 10 个数字字符,返回 True;如果有一个不是这个范围内的字符,返回 False。
>>> "009876".isalnum() # 都符合要求 True >>> "a009876".isalnum() # 都符合要求 True >>> "".isalnum() # 空字符串,返回False False >>> "abc_def".isalnum() # _字符不符合要求,所以返回False False
该函数将所有的大写字母都转换成小写字母,其他字符原封不动。
>>> "abCD987".lower() # CD => cd, 其他没有变化 'abcd987'
该函数将所有的小写字母都转换成大写字母,其他字符原封不动。
>>> "abCD987".upper() # ab => AB 'ABCD987' >>> "我爱python".upper() '我爱PYTHON'
如果有多个单词,那么每个单词的首字母都变成大写的。
>>> "abc".title() # 仅仅包含一个单词 'Abc' >>> "this is our favorite book".title() # 包含多个单词,每个的首字母都大写 'This Is Our Favorite Book'
分割字符可以是单个字符,也可以是一个字符串。下面的例子中既有单个字符组成的分割字符,也有多个字符组成的分割字符。
>>> "a:b:c".split(":") # 分割字符是单个字符 ['a', 'b', 'c'] >>> "abc--def".split('--') # 分割字符是两个字符 ['abc', 'def'] >>> "abc:def:".split(':') # 尾部有分割字符 ['abc', 'def', ''] >>> "::::abc:def::::".split(':') # 头部有分割字符,有连续的分割字符 ['', '', '', '', 'abc', 'def', '', '', '', '']
该接口函数接收一个字符串列表或者元组,返回一个新的字符串,输入的字符串集合不会发生变化。返回的字符串就是用指定的字符连接起来的。
下面的例子使用“:”来连接输入的字符串列表。
>>> ":".join(['a', 'b', 'c']) 'a:b:c'
要求输入是包含单个字符的字符串。
ASCII 码是早期的一种编码方式,使用 8 位来表示一个字符。目前这种编码方式依然广泛使用,但这种表示方法无法表示中文。
>>> ord("a") # 字符a的ASCII码是97 97 >>> ord("x") # 字符x的ASCII码是120 120 >>> ord("?") 63 >>> ord("ab") # 两个字符,抛出异常 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: ord() expected a character, but string of length 2 found
输入参数必须在 0 到 255 之间,超出范围会抛出异常。
>>> chr(0) # ASCII码中0表示的字符 '\x00' >>> chr(255) '\xff' >>> chr(36) '$' >>> chr(2236) # 超出范围,导致抛出异常 Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: chr() arg not in range(256)