python的二维数组的切片避坑小结

今天想在项目中使用二维数组遇到一些坑,做一个小结为以后避坑,主要是二维数组的生成和切片部分。

(1)二维数组的切片

二维数组有list和np.array 两种数据格式,但是它们的切片方式是完全不同的。

import pandas as pd
import numpy as np
list = [[1,2,3],[4,5,6],[7,8,9]]
list_nparr = np.array(list)
list
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
list_nparr
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])

1.二维np.array的切片

list_nparr[0:2,0:2]  # 按行列切片,中间用逗号隔开
array([[1, 2],
       [4, 5]])

2.二维list的切片

  • 只能每次只取一行切片,再循环
[list[i][0:2] for i in range(0,3)]
[[1, 2], [4, 5], [7, 8]]

(2)数组的生成

  • 数组的复制 是对引用的复制
m=3
n=3
l= [[0]*m]*n
l
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
l[0][0]=3
l
[[3, 0, 0], [3, 0, 0], [3, 0, 0]]

可以看到[0]*3 实际上是对[0]进行了三次相同的引用。 改变其中一个引用,则3个都会发生改变。
所以为避免上述情况,一般用列表生成式去生成二维数组。

a = [[i for i in range(1,10)] for j in range(1,3)]
a
[[1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 5, 6, 7, 8, 9]]
原文地址:https://www.cnblogs.com/laiyaling/p/11970839.html