Python程序设计入门(3)数组的使用
1、Python的数组可分为三种类型:
(1)list普通的链表,初始化后可以通过特定方法动态增加元素。
定义方式:arr=[元素]
(2)Tuple固定的数组,一旦定义后,其元素个数是不能再改变的。
定义方式:arr=(元素)
(2)Dictionary词典类型,即是Hash数组。
定义方式:arr={元素k:v}
2、下面具体说明这些数组的使用方法和技巧:
(1)list链表数组
a、定义时初始化
a=[1,2,[1,2,3]]
b、定义时不初始化
一维数组:
arr=[]
多维数组:
arr=[iforiinrange(10),1,[]]#注意,iforinxx这个必须放在第一个位置,否则要先定义i,
如:
arr=[iforiinrange(5),jforjinrange(5),[]]
这是错误的
i=0 j=0 arr=[iforiinrange(5),jforjinrange(5),[]]
这是正确的
c、del语句和:的用法
可以用start:end表示数组里的一个区间(i>=startandi<end)
del删除数组里的指定元素
如:
delarr[0] delarr[0,2] newarr=arr[0,2]
d、遍历数组:
fork,vinenumerate(arr): printk,v
e、增加元素:
一维
arr.append('aaa')
二维
arr[0].append('aaa')
如果要在任意位置插入用arr.insert(n,值)
此外还有一种特殊的用法是:
arr+=[数组元素]
在不指定下标的情况下,是允许用+=增加数组元素的。
(2)Tuple固定数组
Tuple是不可变list,一旦创建了一个tuple就不能以任何方式改变它。
下面拿具体示例说明:
>>>t=("a","b","c","d","e") #[1]用小括号包围来定义 >>>t ('a','b','c','d','e') >>>t[0] #[2]直接列出某下标的元素 'a' >>>t[-1] #[3]负数表示,从后面倒数的索引-1为倒数第一个,0是顺数第一个 'example' >>>t[1:3] #[4]这里1:3是i>=1andi<3的区间 ('b','mpilgrim')
Tuple没有的方法:
[1]不能向tuple增加元素,没有append、extend、insert 等方法。
[2]不能从tuple删除元素,没有remove或pop方法。
[3]不能在tuple中查找元素,没有index方法(index是查找而不是索引,索引直接用下标即可,如:t[0])。
使用tuple的好处:
*Tuple比list操作速度快。如果您定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用tuple代替list。
*如果对不需要修改的数据进行“写保护”,可以使代码更安全。使用tuple而不是list如同拥有一个隐含的assert语句,说明这一数据是常量。如果必须要改变这些值,则需要执行tuple到list的转换(需要使用一个特殊的函数)。
*还记得我说过dictionarykeys可以是字符串,整数和“其它几种类型”吗?Tuples就是这些类型之一。Tuples可以在dictionary中被用做key,但是list不行。实际上,事情要比这更复杂。Dictionarykey必须是不可变的。Tuple本身是不可改变的,但是如果您有一个list的tuple,那就认为是可变的了,用做dictionarykey就是不安全的。只有字符串,整数或其它对dictionary安全的tuple才可以用作dictionarykey。
Tuple可以转换成list,反之亦然。
转换方式为:
t=list(t)
反之:
arr=tuple(arr)
(2)Dictionary(哈希数组)词典数组
#Dictionary的用法比较简单,它可以存储任意值,并允许是不同类型的值,下面实例来说明: #下面例子中a是整数,b是字符串,c是数组,这个例子充分说明哈希数组的适用性。 dict_arr={'a':100,'b':'boy','c':['o','p','q']}
#可以直接增加一个元素,如果同名,则会改变原来的key的元素的值 dict_arr['d']='dog'
#输出所有的key printdict_arr.keys()
#输出所有的value printdict_arr.values()
#遍历数组 importtypes forkindict_arr: v=dict_arr.get(k) iftype(v)istypes.ListType:#如果数据是list类型,继续遍历 printk,'---' forkk,vvinenumerate(v): printkk,vv print'---' else: printdict_arr.get(k)