首页 > 技术文章 > Python 序列的切片整合

maoyizhimi 2018-05-03 16:17 原文

最近学习python,用的是python3,做个小笔记:

a = 'Iloveyou'
 print(len(a))
 8
print(max(a))
'y'
print(min(a))
'I'
print(bool('o' in a))
True
print(a + a)
'IloveyouIloveyou'

print(a*3)
'IloveyouIloveyouIloveyou'
print(a[1:4])
'lov'
print(a.index('y'))
5
print(
a[5])
'y'

切片操作

对于具有序列结构的数据来说,切片操作的方法是:consequence[start_index: end_index: step]。

  • start_index:表示是第一个元素对象,正索引位置默认为0;负索引位置默认为 -len(consequence)
  • end_index:表示是最后一个元素对象,正索引位置默认为 len(consequence)-1;负索引位置默认为 -1。
  • step:表示取值的步长,默认为1,步长值不能为0。

[注意]对于序列结构数据来说,索引和步长都具有正负两个值,分别表示左右两个方向取值。索引的正方向从左往右取值,起始位置为0;负方向从右往左取值,起始位置为-1。因此任意一个序列结构数据的索引范围为 -len(consequence) 到 len(consequence)-1 范围内的连续整数。

切片操作会将按照给定的索引和步长,截取序列中由连续的对象组成的片段,单个索引返回值可以视为只含有一个对象的连续片段。

切片的过程是从第一个想要的对象开始,到第一个不想要的对象结束。第一个想要的对象到第一个不想要的对象之间的连续对象就是你所有想要的对象。

因此在consequence[start_index: end_index]中,切片中包含了consequence[start_index],但不包括consequence[end_index]。

con[start_index]:返回索引值为start_index的对象。start_index为 -len(con)到len(con)-1之间任意整数。
con[start_index: end_index]:返回索引值为start_index到end_index-1之间的连续对象。
con[start_index: end_index : step]:返回索引值为start_index到end_index-1之间,并且索引值与start_index之差可以被step整除的连续对象。

con[start_index: ]:缺省end_index,表示从start_index开始到序列中最后一个对象。
con[: end_index]:缺省start_index,表示从序列中第一个对象到end_index-1之间的片段。
con[:]:缺省start_index和end_index,表示从第一个对象到最后一个对象的完整片段。
con[::step]:缺省start_index和end_index,表示对整个序列按照索引可以被step整除的规则取值。
 a=[1,2,3,4,5,6,7]
print(a[len(a)-1])
7
print( a[-len(a)])
1
print(a[len(a)])

Traceback (most recent call last):
  File "<pyshell#98>", line 1, in <module>
    a[len(a)]
IndexError: list index out of range
>>> a[-len(a)-1]

Traceback (most recent call last):
  File "<pyshell#99>", line 1, in <module>
    a[-len(a)-1]
IndexError: list index out of range

[注意]一定要记住,end_index其实是你第一个不想要获取的对象的索引,所以a[0:-1]是取不到a[-1]的,所以如果要使得切片片段包含end_index位置的对象,请缺省end_index,或者输入一个超出end_index范围的值。

利用步长对序列进行倒序取值

在切片运算中,步长为正,表示从左至右,按照索引值与起始位置索引之差可以被步长整除的规律取值;当步长为负,则表示从右至左,按照按照索引值与起始位置索引之差可以被步长整除的规律取值。

根据这个特性,我们可以很方便对某个序列进行倒序取值,这个方法比reverse方法更方便,且适用于没有reverse方法的字符串和元组。

 a=[1,2,3,4,5,6,7]
b=(1,2,3,4,5,6,7)
c='Let me show you a little thing'
print(a[::-1])
[7, 6, 5, 4, 3, 2, 1]
print(b[::-1])
(7, 6, 5, 4, 3, 2, 1)
print(c[::-1])
'gniht elttil a uoy wohs em teL'
print(a)
[1, 2, 3, 4, 5, 6, 7]
print(b)
(1, 2, 3, 4, 5, 6, 7)
print(c)
'Let me show you a little thing'

a.reverse()
print(a)
[7, 6, 5, 4, 3, 2, 1]

 

推荐阅读