python中列表的切片

1. 切片

取一部分叫做切片,切片的原则是左闭右开,即取头部不取尾部;切片的步长默认为1,不可以为0

In [13]: a = [1,2,3,'bb','cc','dd']

In [14]: a[1:3]
Out[14]: [2, 3]

In [15]: a[1:4]
Out[15]: [2, 3, 'bb']

In [16]: a
Out[16]: [1, 2, 3, 'bb', 'cc', 'dd']

In [17]: a[2:]
Out[17]: [3, 'bb', 'cc', 'dd']

2. 切片中的步长

比如a[1:4:2] 中的2就是表示步长为2,表示就是从第1个元素取到第3个元素,但是是每2个元素取一个。如果步长为1就是表示的连续取值。

In [19]: a = [1,2,3,'aa','bb','cc']

In [20]: a[1:4:2]
Out[20]: [2, 'aa']
    
In [5]: print (a[:3])
[1, 2, 3]

In [6]: print(a[::2])
[1, 3, 'bb']

In [7]: print (a[::-1])
['cc', 'bb', 'aa', 3, 2, 1]

In [8]: print (a[1:5:-1])
[]

In [1]: a = [1,2,3,4,5,6]
In [2]: a[1:4:-2]  
Out[2]: []  #首先看步长,步长为-2,表示逆序取值,然后起始索引位置为1,结束索引位置为4,则是顺序取值的,所以无法取到值

In [3]: a[4:1:-2]
Out[3]: [5, 3]#步长为-2,表示逆序取值,起始位置索引是4,结束位置索引是1,但是无法取到索引为1的值

In [4]: a[-1::-1]
Out[4]: [6, 5, 4, 3, 2, 1]
#步长为-1,逆序取值;起始索引位置为-1,即倒数第一个值,结束为空,则表示取完所有的
    
In [5]: a[-1:0:-1]
Out[5]: [6, 5, 4, 3, 2]
#步长为-1,逆序取值;起始索引位置为-1,则为倒数第一个;结束的索引位置为0,但是无法取到索引位置为0的元素;即无法取到1

In [12]: a[-3:0:-2]
Out[12]: [4, 2]
#步长为-2,逆序间隔取值;其实位置索引为-3,结束位置索引为0,即从倒数第三个取到顺数第一个值;

In [13]: a[-5:-3:-1]
Out[13]: []
#步长为-1,逆序取值;起始位置索引为-5,结束位置索引为-3,即从倒数第5个元素取到倒数第2个元素,这样就变成了顺序取值了,矛盾了,故无法取到值

In [15]: a[-1:-5:-1]
Out[15]: [6, 5, 4, 3]
#步长为-1,即逆序取值;起始位置索引为-1,结束位置索引为-4,即从倒数第一个取到倒数第4个

In [16]: a[-1:-5:-2]
Out[16]: [6, 4]
#步长为-2,即逆序间隔取值;起始位置索引为-1,结束位置索引为-4,即间隔从倒数第1个取到倒数第4个

3. 切片取值总结

[1:] 从当前索引位置取到最后

[1:3] 取索引值为1到3的元素

[1:3:2] 最后一个元素叫做步长

[:3] 从头开始取,取到第二个元素

[::2] 表示以步长为2取出列表中的值

[::-1] 步长为负数,从后面往前面取值,相当于翻转

[1:5:-1] 步长为负数,逆序取值,然而起始位置索引是1,结束位置索引是5,表示顺序取值,与逆序取值相矛盾,即取出来为空

切片取值,优先看步长,步长为正数,表示顺序取值,步长为负数表示逆序取值;然后看起始位置索引和结束位置索引,注意,切片中无法取到结束位置索引所对应的值。

切片的操作适用于字符串和元组,但是字符串和元组是不可变的,列表是可变的。

 

 

### Python 列表切片的使用方法 #### 1. 基本语法 列表切片的操作允许从一个列表中提取部分元素并返回一个新的列表。其基本语法如下: ```python new_list = old_list[start:end:step] ``` - `start` 表示起始索引,默认为0。 - `end` 表示终止索引(不包含该索引处的元素),默认为列表长度。 - `step` 表示步长,默认为1。 如果省略参数,则采用默认值[^1]。 --- #### 2. 示例说明 ##### 示例 1:基础切片操作 假设有一个列表 `my_list = ['a', 'b', 'c', 'd', 'e']`,以下是几种常见的切片方式: - 获取从索引1到索引3之间的元素(不包括索引3): ```python result = my_list[1:4] print(result) # 输出: ['b', 'c', 'd'] ``` - 如果只指定起点而不指定终点,则表示从起点直到列表末尾: ```python result = my_list[2:] print(result) # 输出: ['c', 'd', 'e'] ``` - 如果只指定终点而不指定起点,则表示从列表开头截取至终点之前的部分: ```python result = my_list[:3] print(result) # 输出: ['a', 'b', 'c'] ``` - 完全忽略所有参数则可以复制整个列表: ```python copy_of_my_list = my_list[:] print(copy_of_my_list) # 输出: ['a', 'b', 'c', 'd', 'e'] ``` 以上均基于正向索引的方式[^1]。 --- ##### 示例 2:负数索引的应用 Python 支持负数作为索引来访问列表中的元素。其中 `-1` 表示最后一个元素,依次类推。 - 提取最后三个元素: ```python result = my_list[-3:] print(result) # 输出: ['c', 'd', 'e'] ``` - 提取除了最后两个以外的所有元素: ```python result = my_list[:-2] print(result) # 输出: ['a', 'b', 'c'] ``` 这种特性使得处理序列两端的数据更加灵活[^5]。 --- ##### 示例 3:带有步长的切片 可以通过设置第三个参数来定义步长,从而跳过某些项或者反转顺序。 - 跳跃选取每隔一项的元素: ```python result = my_list[::2] print(result) # 输出: ['a', 'c', 'e'] ``` - 反转列表顺序: ```python reversed_result = my_list[::-1] print(reversed_result) # 输出: ['e', 'd', 'c', 'b', 'a'] ``` 此功能特别适用于字符串或其他可迭代对象的逆序排列。 --- #### 3. 应用场景 - **数据筛选**:当需要从大量数据集中抽取特定范围内的记录时非常有用。 - **深拷贝替代方案**:虽然完整的切片不会创建完全独立的对象副本,但它确实提供了另一种形式上的浅层克隆机制[^1]。 - **算法设计辅助工具**:许多经典编程题目都依赖于熟练掌握这一技巧完成任务分解与重组工作。 --- ### 注意事项 尽管切片简单易懂,但在实际开发过程中仍需注意边界条件以及性能考量等问题。例如对于超大规模数组频繁执行复杂模式匹配可能会带来额外开销,在这些情况下应考虑更高效的库如 NumPy 来优化内存管理效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值