Python切片和切片赋值

本文主要介绍Python切片和切片赋值。切片是浅拷贝,不影响原序列,用于具有序列数据结构的对象,遵循左闭右开原则;切片赋值针对原序列操作,改变切片区域序列,且新赋值须为可迭代类型。还介绍了Python序列的数据结构及内建序列类。

Python切片和切片赋值

slicing与slice assignment区别

  • 切片 slicing
  • 切片赋值 slice assignment
a = [1, 2, 3]
b = a[:]  # 切片
a[1:] = []  # 切片赋值

切片[:]在右侧,切片赋值[:]在左侧;

切片是浅拷贝,不影响原序列;
切片赋值是针对原序列进行操作,改变切片区域的序列。
切片赋值,给序列的切片部分新的赋值必须是可迭代类型

a = [1, 2, 3]
a[1:2] = 3
# TypeError: can only assign an iterable
# int类型的对象是不可迭代对象。

序列

序列(consequence)
- python的一种数据结构,根据索引获取序列中的对象。
- 内建序列类:
- list
- tuple
- 字符串(string,unicode)
- buffer
- 具有序列结构的类一般可以使用方法:in、len()、max()、min()、+、*、index()、切片

切片

参考资料:
ython 序列的切片操作与技巧

  • 切片用于具有序列数据结构的对象;
  • 切片是一种浅拷贝;
  • consequence[start_index:end_index:step]
    • 左闭右开;
    • start_index:取到的第一个值;
    • end_index:取不到的第一个值;
    • step:默认为1,不能为0;为正,从左往右取值;为负,从右往左取值;
# 从右往左取值
a = [1, 2, 3, 1]
b = a[3:0:-1]
print(b)
# [1, 3, 2]
  • 序列在单索引取值时候的索引范围:-len() 到len()-1,否则抛出IndexError
print(a[len(a)])
# IndexError: list index out of range
  • 序列切片,索引范围不局限于-len() 到 len()-1之间,当给出的索引值超出-len() 到 len()-1,会自动将超出的索引值设为默认值(第一个元素以及最后一个元素)
a = [1, 2, 3, 4]
print(a[-100: 100])
#  [1, 2, 3, 4]

切片赋值

切片赋值是针对原序列进行操作,改变切片区域的序列。

a = [1, 2, 3, 4]
a[1:3] = (30,)
print(a)
# [1, 30, 4],新赋值一个元素,原来的两个被切掉。

切片赋值,给序列的切片部分新的赋值必须是可迭代类型

a = [1, 2, 3]
a[1:2] = 3
# TypeError: can only assign an iterable
# int类型的对象是不可迭代对象。
### Python 切片赋值的用法 在 Python 中,切片操作是一种强大的工具,用于访问序列中的子集。通过切片可以实现对列表或其他可变序列的部分替换、删除或扩展。以下是关于 Python 切片赋值的一些重要知识点: #### 基本语法 切片的基本形式为 `sequence[start:end:step]`,其中: - **start** 表示起始索引(包含),默认为 0。 - **end** 表示结束索引(不包含),默认为序列长度。 - **step** 是步长,默认为 1。 当使用切片进行赋值时,右侧表达式的长度不必与左侧切片部分匹配。如果右侧是一个可迭代对象,则会将其内容逐一填充到目标位置[^1]。 #### 替换元素 可以通过切片来替换列表的一部分。例如: ```python lst = [1, 2, 3, 4, 5] lst[1:4] = ['a', 'b', 'c'] print(lst) # 输出: [1, 'a', 'b', 'c', 5] ``` 这里 `[1:4]` 的范围被 `'a'`, `'b'`, `'c'` 取代。 #### 删除元素 如果不提供任何右侧值,可以直接移除指定范围内的元素: ```python lst = [1, 2, 3, 4, 5] del lst[1:4] print(lst) # 输出: [1, 5] ``` 这相当于执行了 `lst[1:4] = []` 操作。 #### 插入元素 即使切片区域为空,也可以向特定位置插入新元素: ```python lst = [1, 5] lst[1:1] = ['a', 'b', 'c'] print(lst) # 输出: [1, 'a', 'b', 'c', 5] ``` 这种技术允许动态调整列表结构而不影响其他部分。 #### 扩展应用 对于更复杂的场景,比如反转列表或者每隔几个项更新数据,都可以利用灵活的 step 参数完成任务: ```python numbers = list(range(6)) numbers[::-1] = reversed(numbers[:]) # 使用负数作为 step 实现逆序写回原数组 print(numbers) # 输出: [5, 4, 3, 2, 1, 0] letters = ['a','b','c','d','e','f'] letters[::2] = ['A','B','C'] # 更新偶数位上的字母 print(letters) # 输出: ['A', 'b', 'B', 'd', 'C', 'f'] ``` 上述例子展示了如何借助正反方向以及不同跨度来进行精确控制[^2]。 #### 总结 Python切片赋值功能极大地增强了开发者处理集合类数据的能力,在实际编程过程中非常实用且高效。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值