Python 字符串切片

Python 字符串切片

在Python中,字符串是一个有序的Unicode字符序列。字符串中的每个字符在序列中都有一个唯一的索引。索引从0开始。字符串中的第一个字符具有位置索引0。索引随着字符串的末尾而递增。

如果将字符串变量声明为var=”HELLO PYTHON”,字符串中每个字符的索引如下所示 –

Python 字符串切片

Python允许您通过索引访问字符串中的任何单个字符。在这种情况下,0是字符串的下限,11是上限。因此,var[0]返回H,var[6]返回P。如果方括号中的索引超过了上限,Python会引发IndexError。

>>> var="HELLO PYTHON"
>>> var[0]
'H'
>>> var[7]
'Y'
>>> var[11]
'N'
>>> var[12]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range

Python序列类型(以及字符串对象)的一个独特特性是它也具有负索引。在上面的例子中,使用了正索引方案,其中索引从左到右递增。在负索引的情况下,末尾的字符具有-1索引,索引从右到左递减,因此第一个字符H具有-12索引。

Python 字符串切片

让我们使用负索引来获取 N、Y 和 H 字符。

>>> var[-1]
'N'
>>> var[-5]
'Y'
>>> var[-12]
'H'
>>> var[-13]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

再次提醒,如果索引超出范围,则会遇到IndexError。

因此,我们可以使用正向或反向索引来从字符串中获取字符。

>>> var[0], var[-12]
('H', 'H')
>>> var[7], var[-5]
('Y', 'Y')
>>> var[11], var[-1]
('N', 'N')

在Python中,字符串是不可变对象。如果对象被存储在某个内存位置后无法进行原地修改,那么它就是不可变的。你可以通过索引来获取字符串中的任何字符,但是无法用另一个字符替换它。在我们的例子中,字符Y在HELLO PYTHON中的索引为7。试着将Y替换为y,看看会发生什么。

var="HELLO PYTHON"
var[7]="y"
print (var)

将会生成以下输出:

Traceback (most recent call last):
 File "C:\Users\users\example.py", line 2, in <module>
  var[7]="y"
  ~~~^^^
TypeError: 'str' object does not support item assignment

TypeError是由于字符串是不可变的。

Python将“:”定义为字符串切片运算符。它返回原始字符串的子字符串。其一般用法是−

substr=var[x:y]

“:” 运算符需要两个整数操作数(两个操作数都可以省略,我们将在后面的例子中看到)。第一个操作数 x 是所需切片的第一个字符的索引。第二个操作数 y 是所需字符串中最后一个字符的索引的下一个位置。所以 var(x:y] 可以从原始字符串中将字符从第 x 位置到 (y-1)位置分离出来。

var="HELLO PYTHON"

print ("var:",var)
print ("var[3:8]:", var[3:8])

它将产生以下输出 –

var: HELLO PYTHON
var[3:8]: LO PY

负索引也可以用于切片。

var="HELLO PYTHON"
print ("var:",var)
print ("var[3:8]:", var[3:8])
print ("var[-9:-4]:", var[-9:-4])

将产生以下 输出

var: HELLO PYTHON
var[3:8]: LO PY
var[-9:-4]: LO PY

Python的切片操作符的两个操作数都是可选的。第一个操作数默认为零,这意味着如果我们不提供第一个操作数,切片从第0个索引开始切割字符,即第一个字符。它将最左边的子字符串切割到”y-1″个字符。

var="HELLO PYTHON"
print ("var:",var)
print ("var[0:5]:", var[0:5])
print ("var[:5]:", var[:5])

它会生成以下输出 –

var: HELLO PYTHON
var[0:5]: HELLO
var[:5]: HELLO

同样地,y操作数也是可选的。默认情况下,它是“-1”,这意味着字符串将从第x个位置开始切片,一直到字符串末尾。

var="HELLO PYTHON"
print ("var:",var)
print ("var[6:12]:", var[6:12])
print ("var[6:]:", var[6:])

将产生以下输出 −

var: HELLO PYTHON
var[6:12]: PYTHON
var[6:]: PYTHON

自然地,如果两个操作数都未使用,则切片将等于原始字符串。这是因为”x”默认为0,”y”默认为最后一个索引+1(或-1)。

var="HELLO PYTHON"
print ("var:",var)
print ("var[0:12]:", var[0:12])
print ("var[:]:", var[:])

它将生成以下 输出 -

var: HELLO PYTHON
var[0:12]: HELLO PYTHON
var[:]: HELLO PYTHON

左操作数必须小于右操作数,以得到原始字符串的子串。如果左操作数大于右操作数,Python不会引发任何错误,但返回一个空字符串。

var="HELLO PYTHON"
print ("var:",var)
print ("var[-1:7]:", var[-1:7])
print ("var[7:0]:", var[7:0])

它将产生以下 输出

var: HELLO PYTHON
var[-1:7]:
var[7:0]:

切片会返回一个新的字符串。你可以对切割后的字符串进行字符串操作,比如拼接或者再次切割。

var="HELLO PYTHON"

print ("var:",var)
print ("var[:6][:2]:", var[:6][:2])

var1=var[:6]
print ("slice:", var1)
print ("var1[:2]:", var1[:2])

它将产生以下 输出

var: HELLO PYTHON
var[:6][:2]: HE
slice: HELLO
var1[:2]: HE

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程