您的位置:首页 > 编程语言 > Python开发

Python高级特性-切片(Slice)

2017-08-10 23:43 351 查看


切片(Slice)

如何在一个数组中取特定的一组数据? 

是一个个指定?
>>> L = range(10)
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> L[0]
0
>>> L[1],L[2],L[3]
(1, 2, 3)
>>>
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9

数据少还行,要是数据多呢?循环怎么样?
>>> L = range(10)
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for i in range(3):
...     print L[i]
...
0
1
2
>>>
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

这个循环是单个输出,要是需要输出数组还要做一下修改
>>> L = range(10)
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> r = []
>>> for i in range(3):
...     r.append(L[i]) #add L[i] for list r in the end
...
>>> r
[0, 1, 2]
>>>
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11

如果不需要连续取数,而是要间隔取数呢?有点要疯的感觉吧?是不是感觉很麻烦?Python提倡的”优雅”,”简洁”的特性何在?python不能忍啊所以提出了
切片
这种神奇的东东.
还是用上面的例子:
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> L[0:5] #
[0, 1, 2, 3, 4]
>>> L[:5] #若是从list的头部开始索引,0可以省略.
[0, 1, 2, 3, 4]
>>> L[1:5]
[1, 2, 3, 4]
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9

通过使用一个简单的冒号
:
就能优雅的输出数组了,还要什么循环!Python你的节操掉了!根据数组的特性我们还可以倒着输出.
>>> L
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> L[-5:]
[5, 6, 7, 8, 9]
>>> L[-5:-1] #倒数第一个元素的索引是`-1`
[5, 6, 7, 8]
1
2
3
4
5
6
1
2
3
4
5
6

这里有个地方要注意比如某一个切片是这样的
L[x:y]
其中必须x
>>> L = range(10)
>>> L[5:4]
[]
1
2
3
4
1
2
3
4


我还会大跳!

前十个数,每两个取一个:
>>> L[:10:2]
[0, 2, 4, 6, 8]
1
2
3
1
2
3

100个数组中,没5个取一个:
>>> L=range(100)
>>> L[::5] #L[:]是全部显示的意思.
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
1
2
3
1
2
3


tuple,str,Unicode也是可以的

tuple也是一种list,不过tuple是不可变的,所以tuple也可以使用切片,不过输出的还是tuple罢了.
>>> L=(1,2,3,4)
>>> L[:2]
(1, 2)
1
2
3
4
1
2
3
4

同样string
xxx
或Unicode
u'xxx'
也是一种list,所以也可以使用切片.
>>> L='abcde'
>>> L[:2]
'ab'
>>> L='我来了'
>>> L[:2]
'\xe6\x88'
>>> L=u'我来了'
>>> L[:2]
u'\u6211\u6765'
>>>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: