Java中获取一个子序列时可以用Java内置的API来完成操作。
先看一个例子:有一个list,L = ['Java', 'C', 'C++', 'Swift', 'C#'].想取其前3个元素,该怎么做呢?
两种办法:
第一种,本办法,一次取出前3个元素。
那么再看看Python中,提供的强大的获取方式:切片(Slice)操作符
In [6]: L[0:3]
Out[6]: ['Java', 'C', 'C++']
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
如果第一个索引是0,还可以省略:
In [7]: L[:3]
Out[7]: ['Java', 'C', 'C++']
也可以从索引1开始,取出2个元素出来:
In [8]: L[1:3]
Out[8]: ['C', 'C++']
类似的,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试,倒数第一个元素的索引是:-1.
In [10]: L[-1]
Out[10]: 'C#'
String substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。
String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。
在Python中,如果想获取一个序列的子序列时该怎么做呢?Python提供了——“切片”这种强大的技术,可以说是:屠龙刀!先看一个例子:有一个list,L = ['Java', 'C', 'C++', 'Swift', 'C#'].想取其前3个元素,该怎么做呢?
两种办法:
第一种,本办法,一次取出前3个元素。
>>> L = ['Java', 'C', 'C++', 'Swift', 'C#']
>>> [L[0],L[1],L[2]]
['Java', 'C', 'C++']
第二种,用循环,循环便利这个List取出前3个元素。
In [1]: L = ['Java', 'C', 'C++', 'Swift', 'C#']
In [2]: r = []
In [3]: n = 3
In [4]: for i in range(n):
...: r.append(L[i])
...:
In [5]: r
Out[5]: ['Java', 'C', 'C++']
上述两种方式完全可以顺利的取出前3个元素。但是,如果这个List有1万个数值,想要取出前9999个数值的话,这两种方法显得有点费劲了。
那么再看看Python中,提供的强大的获取方式:切片(Slice)操作符
In [6]: L[0:3]
Out[6]: ['Java', 'C', 'C++']
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
如果第一个索引是0,还可以省略:
In [7]: L[:3]
Out[7]: ['Java', 'C', 'C++']
也可以从索引1开始,取出2个元素出来:
In [8]: L[1:3]
Out[8]: ['C', 'C++']
类似的,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,试试,倒数第一个元素的索引是:-1.
In [10]: L[-1]
Out[10]: 'C#'
In [9]: L[-2:]
Out[9]: ['Swift', 'C#']
In [11]: L[-2:-1]
Out[11]: ['Swift']
来实战应用一下切片:
情景:
1、生成一个0~99的数列。
2、取出前10个数。
3、取出后10个数。
4、取出前11~20个数。
5、在前10个数中,每两个取一个。
6、所有数,每5个取一个。
7、原样复制一个list。
tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:
In [12]: (0 , 1 , 2 , 3, 4 ,5 , 6)[:3]
Out[12]: (0, 1, 2)
字符串'xxx'或Unicode字符串u'xxx'也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:
In [13]: 'ABCDEFG'[:3]
Out[13]: 'ABC'
In [14]: 'ABCDEFGHI'[::2]
Out[14]: 'ACEGI'