Python中的数组

说明:本文并不详细介绍Python中的列表,可以参看Python文档。

Python中没有数组的数据结构,但列表很像数组,如:

a=[0,1,2]
这时a[0]=0, a[1]=1, a[[2]=2,但引出一个问题,即如果数组a想定义为0到999怎么办,这时可能通过a = range(0, 1000)实现。或省略为a = range(1000).如果想定义1000长度的a,初始值全为0,则 a = [0 for x in range(0, 1000)]下面是二维数组的定义:
直接定义 a=[[1,1],[1,1]],这里定义了一个2*2的,且初始为0的二维数组。
间接定义 a=[[0 for x in range(10)] for y in range(10)],这里定义了10*10初始为0的二维数组。


后来,我在网上找到了更简单的字义二维数组的方法:

b = [[0]*10]*10,定义10*10初始为0的二维数组。

a=[[0 for x in range(10)] for y in range(10)]比较:print a==b的结果为True。

但用b的定义方法代替a后,以前的可以正常运行的程序也出错了,经过仔细分析得出区别:

a[0][0]=1时,只有a[0][0]为1,其他全为0。


b[0][0]=1时,a[0][0],a[1][0],只到a[9,0]全部为1。

由此得到大数组中的10个小的一维数据全是一个相同的引用,即指向同一地址。

故 b = [[0]*10]*10并不符合我们常规意义上的二维数组。

同时经过试验:c=[0]*10的定义与c=[0 for x in range(10)]有同样的效果,而没有上面相同引用的问题,估计数组c的定义时是值类型相乘,而前面b的用类型的相乘,因为一维数组是一个引用(借用C#中的值类型和引用类型,不知是否合适)。

-*- 此文章为本人发呆时 ctrl+c , ctrl+v 的结果. 如果损害到您的利益, 可以联系我 QQ: 248078462 -*-
posted @ 2007-05-15 17:25 Yoshow 阅读(2283) 评论(4)  编辑 收藏 网摘

  回复  引用    
#1楼2007-12-28 16:19 | xiaoba[未注册用户]
要是定义字符型的数组该怎样定义呢?
  回复  引用  查看    
#2楼[楼主]2007-12-28 16:59 | Yoshow      
也许你想要的是dirct类型,比如下面这个样.

list = {
'Swaroop' : 'swaroopch@byteofpython.info',
'Larry' : 'larry@wall.org',
'Matsumoto' : 'matz@ruby-lang.org',
'Spammer' : 'spammer@hotmail.com'
}

print "Swaroop's address is %s" % list['Swaroop']

# Adding a key/value pair
list['Guido'] = 'guido@python.org'

  回复  引用    
#3楼2008-04-23 11:20 | cocobear[未注册用户]
不错,引用这个解释有意思。

  回复  引用    
#4楼2008-04-23 12:51 | cocobear[未注册用户]
b[0][0]=1时,a[0][0],a[1][0],只到a[9,0]全部为1。

这句话应该改为:
b[0][0]=1时,b[0][0],b[1][0],直到b[9,0]全部为1。

:-)




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 747453




相关文章:

相关链接: