字符串,元组,列表等索引都是按照如下格式:
原理
Python 访问子字符串,可以使用方括号 [] 来截取字符串,字符串的截取的语法格式如下:
变量[头下标:尾下标]
索引值以 0 为开始值,-1 为从末尾的开始位置。
举例
明白以上之后,很容易理解如下代码:
a = "abcdef"
x = a[1:] #截取索引1到所有
y = a[:-1] #从索引0(包含)开始,截取到倒数第1位(不包含)
print('这是a:\n',a)
print('这是a[1:]的结果:\n',x)
print('这是a[:-1]的结果:\n',y)
=============================================
输出结果:
这是a:
abcdef
这是a[1:]的结果:
bcdef
这是a[:-1]的结果:
abcde
再来一个例子:注意区分a为矩阵时的变化。
import numpy as np
a = np.arange(0, 10, 1)
print('这是原来的a:', a)
print('取出a的前5个元素a[:5]:', a[:5])
print('取出a第5个后的所有元素a[5:]:', a[5:])
a = np.reshape(a, (5, 2))
print('将a变成5*2的矩阵:', a)
print('取出矩阵a的前2个元素a[:2]:', a[:2])
===============================================
输出结果如下:
这是原来的a: [0 1 2 3 4 5 6 7 8 9]
取出a的前5个元素a[:5]:
[0 1 2 3 4]
取出a第5个后的所有元素a[5:]:
[5 6 7 8 9]
将a变成5*2的矩阵:
[[0 1]
[2 3]
[4 5]
[6 7]
[8 9]]
取出矩阵a的前2个元素a[:2]:
[[0 1]
[2 3]]
如果还不理解的话,我再举一个list列表的截取:
list = ['Google', 'Runoob', "Zhihu", "Taobao", "Wiki"]
# 读取所以1的元素,也就是说读取第二位
print ("list[1]: ", list[1])
# 从索引1开始,读取到索引-2,也就是说从第二位开始(包含)截取到倒数第二位(不包含)
print ("list[1:-2]: ", list[1:-2])
============================================================================
以上实例输出结果:
list[1]: Runoob
list[1:-2]: ['Runoob', 'Zhihu']
注意:a[0]与a[0,:]作用相同,都是选取第0行。具体看下代码:
import numpy as np
a= np.arange(1,5).reshape(2,2)
print('这是a:\n',a)
print('这是a[0]:\n',a[0])
print('这是a[0,:]:\n',a[0])
print('这是a[1]:\n',a[1])
输出如果如下:=================
这是a:
[[1 2]
[3 4]]
这是a[0]:
[1 2]
这是a[0,:]:
[1 2]
这是a[1]:
[3 4]
进阶
尝试使用X[1:]和X[:-1]表示如下式子:
分析如下:
代码如下:
注意这是用向量表示
y = sum((x[1:]-x[:-1]))
拓展
数组矩阵的行列也是从索引0开始的,所以解释如下:
对于X[:,0];
是取二维数组中第一维的所有数据
对于X[:,1]
是取二维数组中第二维的所有数据
对于X[:,m:n]
是取二维数组中第m维到第n-1维的所有数据
对于X[:,:,0]
是取三维矩阵中第一维的所有数据
对于X[:,:,1]
是取三维矩阵中第二维的所有数据
对于X[:,:,m:n]
是取三维矩阵中第m维到第n-1维的所有数据