python之切片

取一个list或tuple的部分元素是非常常见的操作。比如,一个list如下:

>>> L = [‘Michael‘, ‘Sarah‘, ‘Tracy‘, ‘Bob‘, ‘Jack‘]

取前3个元素,应该怎么做?

笨办法:

>>> [L[0], L[1], L[2]]
[‘Michael‘, ‘Sarah‘, ‘Tracy‘]

之所以是笨办法是因为扩展一下,取前N个元素就没辙了。

取前N个元素,也就是索引为0-(N-1)的元素,可以用循环:

>>> r = []
>>> n = 3
>>> for i in range(n):
...     r.append(L[i])
...
>>> r
[‘Michael‘, ‘Sarah‘, ‘Tracy‘]

对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这种操作。

对应上面的问题,取前3个元素,用一行代码就可以完成切片:

>>> L[0:3]
[‘Michael‘, ‘Sarah‘, ‘Tracy‘]

L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引012,正好是3个元素。

如果第一个索引是0,还可以省略:

>>> L[:3]
[‘Michael‘, ‘Sarah‘, ‘Tracy‘]

也可以从索引1开始,取出2个元素出来:

>>> L[1:3]
[‘Sarah‘, ‘Tracy‘]

类似的,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试:

>>> L[-2:]
[‘Bob‘, ‘Jack‘]
>>> L[-2:-1]
[‘Bob‘]

记住倒数第一个元素的索引是-1

切片操作十分有用。我们先创建一个0-99的数列:

>>> L = list(range(100))
>>> L
[0, 1, 2, 3, ..., 99]

可以通过切片轻松取出某一段数列。比如前10个数:

>>> L[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

后10个数:

>>> L[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

前11-20个数:

>>> L[10:20]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

前10个数,每两个取一个:

>>> L[:10:2]
[0, 2, 4, 6, 8]

所有数,每5个取一个:

>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

甚至什么都不写,只写[:]就可以原样复制一个list:

>>> L[:]
[0, 1, 2, 3, ..., 99]

tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:

>>> (0, 1, 2, 3, 4, 5)[:3]
(0, 1, 2)

字符串‘xxx‘也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:

>>> ‘ABCDEFG‘[:3]
‘ABC‘
>>> ‘ABCDEFG‘[::2]
‘ACEG‘

在很多编程语言中,针对字符串提供了很多各种截取函数(例如,substring),其实目的就是对字符串切片。Python没有针对字符串的截取函数,只需要切片一个操作就可以完成,非常简单。

时间: 2024-10-16 03:04:58

python之切片的相关文章

python:切片字符

python的切片字符:(:) 1.单切片字符 python的切片字符用于元组.字符串或者列表,采用的是左闭右开,即包含冒号左侧的第N个个数,不包含右侧的数,下面以列表示例: >>> a=[1,2,3,4] >>> a[1:] [2, 3, 4] >>> a[1:3] [2, 3] >>> a[:3] [1, 2, 3] >>> 2.双切片字符 双切片:(::)一般是用于取其中几位元素或者倒换字符串元组列表等,写法也

python 字符串切片

python 的字符串切片: 可以正向切片,也可以反向切片,并且能够偶数切片,奇数切片( 同时都是支持正向反向的 ) 先说索引,python的字符串(数组也是这样),索引默认从0开始,如果是倒序切片,则最后一个字符串(数组的最后一个元素)的索引是  -1. 当索引为负数的时候,计数从字符串的右边开始. 切片的基本模式是: str[start:end:step] 其中,任意一项都可以为空. 索引的结束值,不能被取到,被取到的最后一个值是 索引 - 1 对应的元素( 其实因为是索引下标从0 开始计数

python的切片操作

切片操作符是序列名后跟一个方括号,方括号中有一对可选的数字,并用冒号分割.注意这与你使用的索引操作符十分相似.记住数是可选的,而冒号是必须的. 切片操作符中的第一个数(冒号之前)表示切片开始的位置,第二个数(冒号之后)表示切片到哪里结束,第三个数(冒号之后)表示切片间隔数.如果不指定第一个数,Python就从序列首开始.如果没有指定第二个数,则Python会停止在序列尾.注意,返回的序列从开始位置开始 ,刚好在 结束 位置之前结束.即开始位置是包含在序列切片中的,而结束位置被排斥在切片外. 这样

python序列切片

Python中的序列包括字符串.列表.元组,下面以字符串为例进行演示,列表和元组效果同字符串 >>> a='0123456789' >>> a[0:2] '01' >>> a[3:5] '34' >>> a[-2] '8' >>> a[0:] '0123456789' >>> a[2:] '23456789' >>> a[:] '0123456789' >>> a

【Python笔记】剖析Python的切片(slicing)语法

相信即使是Python新手也很容易理解下面的切片行为: >>> s = 'this_is_a_test' >>> s[1 : 5] 'his_' 进一步,下面的语法及输出也很不难理解: >>> s = 'this_is_a_test' >>> s[ : : 2] 'ti_sats' 那么,下面的呢? >>> s = 'this_is_a_test' >>> s[ : : -1] 'tset_a_si

【Python】切片

处理Python的部分元素,称之为切片. 创建切片 指定要是用的第一个元素和最后一个元素的索引,与range()函数一样,Python在到达你指定的第二个索引前面的元素后停止. 先定义一个列表vegetables vegetables = ['tomato','bean','potato','onion','radish'] 取出第1~3个元素 print(vegetables[0:3]) 取出第2~4个元素 print(vegetables[1:4]) 取出前4个元素 print(vegeta

彻底弄清python的切片

lis = range(100) # [0, 1, 2, 3, ..., 99] # 取前10个 lis[:10] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 取后10个 lis[-10:] # [90, 91, 92, 93, 94, 95, 96, 97, 98, 99] # 第11到20个 lis[-10:] # [90, 91, 92, 93, 94, 95, 96, 97, 98, 99] # 前10个数,每两个取一个(这里要注意第三位是间隔) lis[:10

python之切片与迭代

取一个列表或元组的部分元素是非常常见的操作. n=[] (n[]n[]) 当取多个元素时,可以用python自带的切片(slice) n=[] (n[:]) [123, 234] n[0:2]表示,从索引0开始,直到索引2为止,但不包含索引2,即索引0,1,正好是2个元素,如果第一个元素是0还可以省略 print(n[:2]) 也可以从索引1开始,取两个元素 n=[] (n[:]) [234, 456] 倒数第一个元素的索引是-1 操作切片十分有用,先创建一个0-99的数列: L=(()) (L

Python随笔-切片

Python为取list部分元素提供了切片操作,list[begin:end]获取list的[begin,end)区间元素. 可以用负数索引. tuple.str都是list的一种,所以也适用. 可以用::n抽取间隔为n的元素. 可以用于复制list. arr = [0, 1, 2, 3, 4, 5] print(arr[1:3]) print(arr[1:-2]) print(arr[:-1]) print(arr[1:]) print(arr[::2]) arr = (0, 1, 2, 3,