Python中的序列是可以采用负数的索引来访问的,其范围是 -1 到序列的负长度,也就是
-len(sequence) <= index <= -1,负索引以序列的结束为起点。
除了提供按照索引,访问序列中的单个元素,Python也提供了切片的方式访问序列中的子序列的方式,这就是切片的访问方式,其一般语法如下:
sequence[starting_index:ending_index]
如此,我们会得到从starting_index对应元素开始,到ending_index对应元素结束,但是不包括ending_index对应元素,所组成的子序列的内容。
起止索引都是可选的选项,如果没有提供或者为None,那么开始索引默认为0,结束索引默认为序列最末尾的索引。切片的访问模式,有第三个值,类似于步长,其访问类似下面代码。
扩展资料
python的索引:
索引的基本格式
变量名[x]--索引为x的值;
变量名[i,j]--索引从i到j-1的值;
索引值(从左往右)从0开始,到N-1结束(有始无终);
索引值(从右往左)从-1开始,到-N结束。
索引的其他特点:可嵌套性。
由于高级数据类型具有可嵌套性,所以索引也具有可嵌套性。其格式为:
变量[index_1][……][index_n]
执行方向:从左向右依次执行。
一、创建一个列表
只要把逗号分隔的不同的数据项使用方括号括起来即可。如下所示:
复制代码代码如下:
list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"];
与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。
二、访问列表中的值
使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符,如下所示:
复制代码代码如下:
#!/usr/bin/python
list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5, 6, 7 ];
print "list1[0]: ", list1[0]
print "list2[1:5]: ", list2[1:5]
以上实例输出结果:
复制代码代码如下:
list1[0]: physics
list2[1:5]: [2, 3, 4, 5]
三、更新列表
你可以对列表的数据项进行修改或更新,你也可以使用append()方法来添加列表项,如下所示:
复制代码代码如下:
#!/usr/bin/python
list = ['physics', 'chemistry', 1997, 2000];
print "Value available at index 2 : "
print list[2];
list[2] = 2001;
print "New value available at index 2 : "
对于Python的初学者,在对象的使用过程中,由于对变量的赋值和对象的复制中的概念模糊,导致程序出错。
例如,下面的代码:
输出结果为:
a = [6,2,3,4,5],
b = [6,2,3,4,5],
c = [1,2,3,4,5]
a等于b?True
a等于c?True
a是b?True
a是c False
可以看到,a,b, c所指向的对象的值都相同(a==b为True) a和b都是代表同一个对象(a is b为True)。当我们通过变量b对该列表进行修改时,由于a也指向该列表,所以当打印a,b时,我们得到相同的值。 而a和c则是代表不同的对象(a is c为False),所以修改b所指向得列表不会改变c梭子乡的列表的值
在Python中,所有的变量都代表了对象,即便是简单的数字类型(int, float, bool),也是以对象的形式存在的。我们看下面的代码:
输出结果是:
a==b为True
a is b为True
可见,a, b都是指向同一个对象。接下来,进行下面的 *** 作,
输出结果是:
a = 1, b = 2
a is b为False
与前面的列表不同,当我们对b做修改时,实际上是给b赋予了一个新生成的对象,对数值类型来说,所有的数值运算都会创建一个数值对象,并将这个对象指定给变量。因此,a与b指向了不同的对象,数值也不同。
再回过头来看列表对象,
我们知道,b是与a指向同一对象的变量,使用b对该对象进行修改,与使用a对该对象进行修改,效果是完全一样的。如果我们需要需要一个与a完全相同又与a相互独立的列表,那么就需要复制这个对象,也就是新建一个内容和源对象相同的对象。
对于列表来说,最简单的复制方法是通过下标索引的方式创建新的列表:
对于各种数据类型通用的对象拷贝复制,我们可以使用python内建的copy模块。
对于复杂对象(如嵌套列表)的复制,则需要注意区分浅拷贝和深拷贝。我们来看下面的代码:
得到的结果是:
a[0] is b[0]为 True
a[0] is c[0]为 False
a = [[-1, 2, 3], [4, 5, 6]]
b = [[-1, 2, 3], [7, 8, 9]]
c = [[1, 2, 3], [4, 5, 6]]
a[1] is b[1]为False
从上面的代码我们可以看到,copy函数为浅拷贝,只拷贝了对象的外层,而对象内部所包含的对象仍然指向原有的对象。而deepcopy则为深拷贝,对象内部的对象也进行了复制。
以上我们对变量的赋值和对象的复制做了更加深入的分析。在具体的使用中,我们需要根据具体来决定使用赋值、浅拷贝、深拷贝。
以上就是关于Python中使用负数索引的切片全部的内容,包括:Python中使用负数索引的切片、python 列表 *** 作的一个问题、Python的赋值与复制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)