如何对数组执行切片操作?以生成连续相邻元素子数组为例
生成数组相邻元素对子数组的几种方法
嘿,这个需求在处理序列数据时挺常见的,我给你分享几个Python里的实用实现方式,都能轻松得到你想要的结果:
方法1:列表推导式(简洁直观)
这是最常用的写法,一行代码就能搞定,利用Python的切片特性:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] result = [a[i:i+2] for i in range(len(a)-1)] print(result)
解释一下:range(len(a)-1) 确保我们遍历到倒数第二个元素(索引8),这样a[i:i+2]每次都会取当前元素和下一个元素组成子数组,不会出现索引越界的问题,最终生成9个符合要求的子数组。
方法2:zip函数(Pythonic风格)
用zip函数可以更优雅地实现,它能把两个序列对应位置的元素配对:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 先得到元组对,再转成列表的列表 result = [list(pair) for pair in zip(a, a[1:])] print(result)
这里a[1:]是原数组从第二个元素开始的切片[2,3,...,10],zip(a, a[1:])会把a的每个元素和a[1:]对应的元素配对,比如(1,2)、(2,3)...最后自动截断到较短序列的长度,正好得到9对。如果接受元组形式的子元素,直接list(zip(a, a[1:]))就可以了。
方法3:普通循环(适合新手理解)
如果刚接触Python,用循环一步步实现会更清晰:
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] result = [] for i in range(len(a)-1): # 每次取当前元素和下一个元素组成子数组 result.append([a[i], a[i+1]]) print(result)
这种写法逻辑直白,先初始化空列表,再逐个添加符合要求的子数组,容易跟踪每一步的变化。
扩展:生成更长的窗口
如果之后需要生成每个子数组包含3个元素(比如[[1,2,3], [2,3,4], ...]),只要调整切片长度和遍历范围就行,比如:
result = [a[i:i+3] for i in range(len(a)-2)]
原理和上面完全一致,只要保证窗口长度不超过剩余元素数量即可。
内容的提问来源于stack exchange,提问作者RAM PRATHIP
相关产品推荐
相关产品推荐

