字符串
Python 可以操作字符串,字符串有多种形式,可以使用单引号()或双引号("")都可以获得同样的结果。反斜杠 \ 可以用来转义, print() 函数会生成可读性更强的输出,即略去两边的引号,并且打印出经过转义的特殊字符。

>>> str1 = 'Hello World, '
>>> str2 = "World Hello, "
>>> str3 = "I'm fine. "
>>> str4 = 'I\'m fine. '
>>> print(str1,str2,str3,str4)
Hello World,  World Hello,  I'm fine.  I'm fine.

如果你不希望前置了 \ 的字符转义成特殊字符,可以使用原始字符串方式,在引号前添加 r 即可。

>>> # 将 \name 视为 \n 换行
>>> print('C:\some\name')  
C:\some
ame
>>> # 透过 r' 指出使用原始字符串
>>> print(r'C:\some\name')
C:\some\name

字符串字面值可以跨行连续输入。一种方式是用三重引号 “”""""‘’’’’’,字符串中的回车换行会自动包含到字符串中,如果不想包含,在行尾添加一个 \ 即可。如下例:

>>> print("""\
... Hi,
...   It is a letter from Python.
... """)
Hi,
  It is a letter from Python.

字符串可以用 + 进行连接,可以用 , 进行连接数字与字符串,可以用 * 进行重复;相邻的两个或多个字符串字面值会自动连接到一起,对很长的字符串拆开分别输入的时候尤其有用,但只能对两个字面值这样操作,变量或表达式不行;如果想连接变量,或者连接变量和字面值,可以用 + 号。

>>> # 'un' 重复 3 次,与 'ium' 进行连接
>>> 3 * 'un' + 'ium'
'unununium'
>>> print('un 重复 ', 3, '次')
un 重复  3 次

>>> # 相邻的两个或多个字符串字面值连接到一起
>>> text = ('Put several strings within parentheses '
...         'to have them joined together.')
>>> text
'Put several strings within parentheses to have them joined together.'

>>> # 只能对两个字面值这样操作,变量或表达式不行
>>> prefix = 'Py'
>>> prefix 'thon' 
  File "<stdin>", line 1
    prefix 'thon'
                ^
SyntaxError: invalid syntax

>>> # 用 + 号连接变量和字面值
>>> prefix + 'thon'
'Python'

字符串是可以被索引 (index) 的,第一个字符索引是 0,索引也可以用负数,这种会从右边开始数,注意 -0 和 0 是一样的,所以负数索引从 -1 开始;单个字符并没有特殊的类型,只是一个长度为一的字符串。

>>>
>>> word = 'Python'
>>> word[0]  
'P'
>>> word[-1]
'n'

# 下方为索引的对应关系
 +---+---+---+---+---+---+
 | P | y | t | h | o | n |
 +---+---+---+---+---+---+
   0   1   2   3   4   5   6
  -6  -5  -4  -3  -2  -1

除了索引,字符串还支持切片 (Slice),索引可以得到单个字符,而切片可以获取子字符串,切片的开始是被包括在结果中,而结束不被包括。切片的索引有默认值;省略开始索引时默认为 0,省略结束索引时默认为到字符串的结束,这使得 word[:i] + word[i:] 等于 word。

>>> # 从索引 0 开始(包含),到 2 为止(不包含)
>>> word[0:2]  
'Py'

>>> # 省略开始索引时默认为 0
>>> word[:2]   
'Py'

>>> # 省略结束索引时默认为到字符串的结束
>>> word[4:]   
'on'

>>> # 从索引 -2 开始(包含),到字符串的结束
>>> word[-2:]  
'on'

>>> word[:2] + word[2:]
'Python'

试图使用过大的索引会产生一个错误;但是,切片中的越界索引会被自动处理。

>>> # word 只有 6 个字符,过大的索引会产生一个错误
>>> word[42]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

>>> # 切片中的越界索引会被自动处理
>>> word[4:42]
'on'

Python 中的字符串不能被修改 (immutable),因此,指向字符串的某个索引位置赋值会产生一个错误;如果需要一个不同的字符串,应当新建一个;内建函数 len() 返回一个字符串的长度。

>>> # 字符串不能被修改
>>> word[0] = 'J'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> word[2:] = 'py'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

>>> # 新建一个字符串
>>> 'J' + word[1:]
'Jython'

>>> # len() 返回一个字符串的长度
>>> s = 'supercalifragilisticexpialidocious'
>>> len(s)
34

字符串的常用操作

  • split(str="", num=-1):通过指定分隔符对字串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串,-1 表示分割所有。
  • replace(old, new[, max]):返回字符串中的 old(旧字符串)替换成 new (新字符串) 后生成的新字符串,如果指定第三个参数 max,则替换不超过 max 次。
  • upper():返回转化为大写字符后的值。
  • lower():返回转化为小写字符后的值。
  • join(sequence):sequence 要连接的序列 ,返回指定字符串连接序列中元素后生成的新字符串。
  • 格式化字符串:’%s %s %d’ % (‘hello’,‘world’,10),%s 表示字符串,%d 表示整数,中间的 % 时连接符号,小括号内是对应前面的参数。
>>> word = 'Python'
>>> word.split('t')
['Py', 'hon']
>>> word.replace('th',"TH")
'PyTHon'
>>> word.upper()
'PYTHON'
>>> word.lower() 
'python'
>>> word.join([' A ',' B ', ' C '])         
' A Python B Python C '
>>> str = '%s %s % d' % ('hello','world',10)
>>> print(str)
hello world  10