ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python切片详解——[a::-1]、 [:b:-1]、 [::-1]的使用

2021-12-21 21:01:13  阅读:323  来源: 互联网

标签:index python list 列表 切片 step 详解 print


目录

切片

作用:处理列表的部分元素

用切片复制列表

 Python可切片对象的索引方式

切片的参数

 step:正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以步长1取值。

[a::-1]的使用

[:b:-1]的使用

[::-1] 的使用


 

切片

作用:处理列表的部分元素

代码:

list=[1,2,3,4,5,6,7,8,9]
print(list[1:5])

 

输出:

[2, 3, 4, 5]

特点:左闭右开,[1:5]代表索引1、2、3、4的元素。

如果没有指定第一个参数,自动从头开始。

代码:

list=[1,2,3,4,5,6,7,8,9]
print(list[:5])

 

输出:

[1, 2, 3, 4, 5]

同理如果没有指定第二个参数,自动到末尾结束。


用切片复制列表

那么如何用切片复制一个列表呢?

 

代码:

list=[1,2,3,4,5,6,7,8,9]
list_1=list[2:5]
print(list)
print(list_1)

 

输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9]
[3, 4, 5]

当我们复制列表不用切片,而直接赋值时:

list=['cat','dog','pig']
list_1=list
list.append('1')
list_1.append('2')
print(list)
print(list_1)

 

输出:

['cat', 'dog', 'pig', '1', '2']
['cat', 'dog', 'pig', '1', '2']

原本我们想得到的结果是在list列表中加上1,在list_1列表中加上2,然而得到的结果却是相同的。

这是因为这样实际上是让python将新变量(也就是list_1)关联原来的列表。当你用list_1列表或原来的list列表时实际上指向的是同一个列表。


 Python可切片对象的索引方式

包括:正索引和负索引两部分,如下图所示,以list对象a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:

 下面以实例说明负索引的使用:

list=[1,2,3,4,5,6,7,8,9]
print(list[:-4])

 

输出:

[1, 2, 3, 4, 5]

 

[:-4]代表着索引为0、1、2、3、4的元素,也就是从第一个元素到倒数第5个。


切片的参数

切片操作基本表达式:object[start_index:end_index:step]

 step:正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以步长1取值。

step为正数时

代码:

list=[1,2,3,4,5,6,7,8,9]
print(list[:6:2])

 

 输出:

[1, 3, 5]

 step=2代表从头开始每隔2个元素取一次值。

step为负数时

代码:

list=[1,2,3,4,5,6,7,8,9]
print(list[1:6:-1])

 

输出:

[]

 输出为空列表,说明没取到数据,这是因为step=-1,决定了从右往左取值,而start_index=1到end_index=6决定了从左往右取值,两者矛盾,所以没有取到值。


[a::-1]的使用

代码:

list=[1,2,3,4,5,6,7,8,9]
print(list[4::-1])

 

输出:

[5, 4, 3, 2, 1]

 当step为负数时,end_index默认为第一个数,所以从右往左取值,从start_index=4开始,一直取到“起点”1。

[:b:-1]的使用

代码:

list=[1,2,3,4,5,6,7,8,9]
print(list[:4:-1])

 

 输出:

[9, 8, 7, 6]

 当step为负数时,start_index默认为最后一个数,所以从右往左取值,从“终点”值9开始,一直取到end_index=4(不包括该点)。

[::-1] 的使用

代码:

list=[1,2,3,4,5,6,7,8,9]
print(list[::-1])

 

输出:

[9, 8, 7, 6, 5, 4, 3, 2, 1]

 当start_index和end_index都不传入值时,而step为负,那么start_index默认为最后一个数,end_index默认为第一个数,所以从最后一个数从右往左取值一直到第一个数。

 

下面我们以一道题来说明:

编写函数, 接收一个列表(包含10个整形数)和一个整形数k, 返回一个新列表.
     函数需求:
        - 将列表下标k之前对应(不包含k)的元素逆序;
        - 将下标k及之后的元素逆序;

代码:

def fun (list,k):
	if k<0 or k>len(list):
		return 'Error'
	else:
		list1=list[k:]
		list2=list1[::-1]
		list3=list[:k]
		list4=list3[::-1]
		return list4+list2
list=[1,2,3,4,5,6,7,8,9,10]
print(list)
print(fun(list,3))

输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[3, 2, 1, 10, 9, 8, 7, 6, 5, 4]

标签:index,python,list,列表,切片,step,详解,print
来源: https://blog.csdn.net/m0_61597961/article/details/122072090

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有