找回密码
 注册
Simdroid-非首页
查看: 114|回复: 8

[二次开发] python中定义多维数组的问题

[复制链接]
发表于 2010-11-24 01:47:21 | 显示全部楼层 |阅读模式 来自 英国
如果用 a = [ [ [],[] ] ]*100,结果100个[ [],[] ]的值都是一样的。怎么办呢?
 楼主| 发表于 2010-11-25 01:29:19 | 显示全部楼层 来自 英国
Simdroid开发平台
没人知道吗?
除了多维数组外,我想不到别的办法来做这个了
存储点号和对应坐标
回复 不支持

使用道具 举报

发表于 2010-11-25 02:43:22 | 显示全部楼层 来自 黑龙江哈尔滨
不明白你在问什么。能否说的清楚一些
回复 不支持

使用道具 举报

 楼主| 发表于 2010-11-25 18:50:36 | 显示全部楼层 来自 英国
我想定义一个多重list,比如a=[[1,2],[3,4],[5,6]。这样a[0][0]=1,a[2][2]=6。如果a[0][0]=0,a就变成a=[[0,2],[3,4],[5,6]]。

以上定义没问题。但是没办法定义a横竖都有100个以上的问题。如果定义a=[[[]]*2]*3,所有子list的值都会一样,比如如果令a[0][0:1]=[0,2],a会变成a=[[0,2],[0,2],[0,2]]。

没人碰到过这个问题吗?

谢谢回复
回复 不支持

使用道具 举报

 楼主| 发表于 2010-11-26 19:03:56 | 显示全部楼层 来自 英国
我就想定义一个二维的数据类型,象fortran里面的二维数组a[100][100]一样,各个item独立存储,for循环中不会象a=[[[]]*100]*100这种list一样被后面的值覆盖掉。

如果list不行,别的data type可以吗?
在看O'Reilly的python教程,但没有看到任何可用的类型或例子

愁死人了!:(
回复 不支持

使用道具 举报

发表于 2010-11-26 20:41:50 | 显示全部楼层 来自 大连理工大学
不管你多急,也得把你的问题描述清楚了吧?
到了四楼才说你要干什么(目的),并且我仍然没看明白!
不要说你做了什么,出现了什么状况,实现不了等等,举例子也说不清楚目的?

我猜,你是想实现 a=[ [1,2], [3,4], [5,6] ,……]  这样逐渐递增的数组 的 简洁赋值 吗 ?
回复 不支持

使用道具 举报

 楼主| 发表于 2010-11-26 22:45:59 | 显示全部楼层 来自 英国
不是,就是想定义一个很大的二维数组,但是不会象a=[[[]]*2]*100这样,最后所有[[]]*2的值都一样。

比如定义a=[[x1,y1],[x2,y2]]的话,a[0][0]=x1,a[1][1]=y2。但是a=[[[]]*2]*100的话,最后所有小维的值都会一样,变成最后赋的那一项就是a[0][:]=a[1][:]=a[100][:],而我以为默认的应该是不同值。

一般语言都会默认不同值的吧,除非你强迫给了相同值。我以为早有人注意到问题并且解决了(因为没搜到)。

anyway,暂时用tuple的list搞定了。就是定义a=[()]*100,然后()里按顺序储值。

我的表达能力真是差啊:(。还是要谢谢帮助:)
回复 不支持

使用道具 举报

发表于 2010-11-27 14:23:34 | 显示全部楼层 来自 大连理工大学
终于明白了你的意思。 看来还是我以前不了解这种情况。但我找到了解决办法:
a=[[0]*2]*100   定义二维数组,但是所有的a[i]都指向同一个地址,就是说,你改变一个a[i]的值,整个a的值都会改变。
你用 a=[ (x1,x2 ) ]*100   定义二维混合组,也行,但缺点是 a[i][j]不能被赋值。

较好的方法是:
  1. a=[ [0 for x in range(2) ]  for y in range(100) ]
复制代码
这样就定义了一个 2*100  的所有初值都为 零的矩阵,并且可以单独赋值。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-11-29 21:32:12 | 显示全部楼层 来自 英国
谢谢! 原来还可以这样定义。收藏了:)
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-5-7 02:39 , Processed in 0.041758 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表