python指定长度的二维list

在python中,为了实现锯齿数组的数据结构,经常需要初始化一个行数指定、列数可以每行不同的list(np.array是定长的,无法实现锯齿数组变长的需求)。

我们首先来回顾一下一维list的初始化。python初始化指定长度的一维list有两种等价的方式

方式一

a = [None] * n

方法二

a = [None for i in range(n)]

结果都能得到 (n = 5)

[None, None, None, None, None]

事实上,在一维情形下,由于初始化list时被复制的元素是None,因此两种方式是等价的。

但是二维情形就不一样了,因为初始化指定长度的二维list时,我们需要把空序列list()复制n次。如果采用方式一,则对list进行浅拷贝,每一个list调用append等方法时,所有list都会同步调用;而方式二这种python风格的数组comprehension表达式方式,则生成了n个相互独立的list对象,此时每行的list之间互不影响。显然,我们应该使用方式二来进行二维list的指定行数的初始化。

测试如下:

方式一

a = [list()] * 5

a[0].append(1)

结果一

[[1], [1], [1], [1], [1]]

方式二

a = [list() for i in range(5)]

a[0].append(1)

结果二

[[1], [], [], [], []]

以上内容来自百度——一枚诚实的搬运工

=====================================

这里是我想实现的存储结构,通过访问灰度图像中像素点的位置(x,y)即二维数组的两个下标来访问该像素点的灰度值,边缘标记等信息。

即二维列表(数组)里的元素依然是列表

 

#假设是5行3列的二维数组,即图片大小为5*3
a = [list() for i in range(5)]
for f in range(len(a)):
    a[f].extend([list() for e in range(3)])#这里用extend才能把迭代的结果追加到a[f]中,有没有中括号都可以。
print(a)
a[1][0].append(255)
a[1][0].append(0)
print(a,'\n',a[1][0][0])#访问第二行第一列的列表中的第一个元素

 

运行结果:

 

[[[], [], []], [[], [], []], [[], [], []], [[], [], []], [[], [], []]]
[[[], [], []], [[255, 0], [], []], [[], [], []], [[], [], []], [[], [], []]]
255

 

顺便补充一下extend和append:

上文中有中括号可能好理解一些

   extend :一个列表追加另一个列表里的所有元素

 

还有另一个方法:只是没有用列表推导式,用了两个for循环,也能实现我想要的存储结构

nums = []
rows = eval(input("请输入行数:"))
columns = eval(input("请输入列数:"))
for row in range(rows):
    nums.append([])
    for column in range(columns):
        #num = eval(input("请输入数字:"))
        nums[row].append([])
print(nums,'\n')
#nums[1][0].append(255)
#nums[1][0].append(0)
#print(nums,'\n')
#print(nums[1][0][1])

=============================

再记一个常见错误:

IndexError: list index out of range

刚开始做自动化测试,遇到这个问题IndexError: list index out of range  
百度一下找到了答案,我只是整理一下

这个错误出现大约有两种情况: 
第1种可能情况 
list[index]index超出范围

第2种可能情况 
list是一个空的 没有一个元素  
进行list[0]就会出现该错误
原文:https://blog.csdn.net/zhoubbt/article/details/53673637 

 

问题还会出在数据集上,一定不能让数据集上下有空行,注意,尤其第一行不能空白(最容易忽视的问题)

这个小小的bug困扰了一整天,总结来看,编程  格式很重要。

bug天天有,总在细节处      解决好细节 就功成一半了。

以上全部来自百度

=====================================

为了实现这个存储结构 查了许多资料问了许多人 顺便被补了一把extend和append的知识 其实这个问题我留了好多天了 今天终于被解决并发现 程序出现问题最好的办法就是手动来一遍 很容易就能发现问题在哪里 另外自己还是 稳不住呐 一找到一些存在感 就开始瞎皮 皮个锤子... 希望以后能改改自己的臭毛病了哭唧唧 冷静 谦和 三思而言 三思而行

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值