python数组的使用2011-09-0313:28:53|分类:派森程序点滴|标签:|字号大中小订阅python数组的使用2010-07-2817:171、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=0j=0arr=[iforiinrange(5),jforjinrange(5),[]]这是正确的c、del语句和:的用法可以用start:end表示数组里的一个区间(i=startandiend)del删除数组里的指定元素如:delarr[0]delarr[0,2]newarr=arr[0,2]d、遍历数组:fork,vinenumerate(arr):printk,ve、增加元素:一维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=1andi3的区间('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'#输出所有的keyprintdict_arr.keys()#输出所有的valueprintdict_arr.values()#遍历数组importtypesforkindict_arr:v=dict_arr.get(k)iftype(v)istypes.ListType:#如果数据是list类型,继续遍历printk,'---'forkk,vvinenumerate(v):printkk,vvprint'---'else:printdict_arr.get(k)list的方法L.append(var)#追加元素L.insert(index,var)L.pop(var)#返回最后一个元素,并从list中删除之L.remove(var)#删除第一次出现的该元素L.count(var)#该元素在列表中出现的个数L.index(var)#该元素的位置,无则抛异常L.extend(list)#追加list,即合并list到L上L.sort()#排序L.reverse()#倒序list操作符:,+,*,关键字dela[1:]#片段操作符,用于子list的提取[1,2]+[3,4]#为[1,2,3,4]。同extend()[2]*4#为[2,2,2,2]delL[1]#删除指定下标的元素delL[1:3]#删除指定下标范围的元素list的复制L1=L#L1为L的别名,用C来说就是指针地址相同,对L1操作即对L操作。函数参数就是这样传递的L1=L[:]#L1为L的克隆,即另一个拷贝。listcomprehension[expr1forkinLifexpr2]2、dictionary:字典(即C++标准库的map)dict={‘ob1′:’computer’,‘ob2′:’mouse’,‘ob3′:’printer’}每一个元素是pair,包含key、value两部分。key是Integer或string类型,value是任意类型。键是唯一的,字典只认最后一个赋的键值。dictionary的方法D.get(key,0)#同dict[key],多了个没有则返回缺省值,0。[]没有则抛异常D.has_key(key)#有该键返回TRUE,否则FALSED.keys()#返回字典键的列表D.values()D.items()D.update(dict2)#增加合并字典D.popitem()#得到一个pair,并从字典中删除它。已空则抛异常D.clear()#清空字典,同deldictD.copy()#拷贝字典D.cmp(dict1,dict2)#比较字典,(优先级为元素个数、键大小、键值大小)#第一个大返回1,小返回-1,一样返回0dictionary的复制dict1=dict#别名dict2=dict.copy()#克隆,即另一个拷贝。3、tuple:元组(即常量数组)tuple=(‘a’,‘b’,‘c’,‘d’,‘e’)可以用list的[],:操作符提取元素。就是不能直接修改元素。4、string:字符串(即不能修改的字符list)str=“HelloMyfriend”字符串是一个整体。如果你想直接修改字符串的某一部分,是不可能的。但我们能够读出字符串的某一部分。子字符串的提取str[:6]字符串包含判断操作符:in,notin“He”instr“she”notinstrstring模块,还提供了很多方法,如S.find(substring,[start[,end]])#可指范围查找子串,返回索引值,否则返回-1S.rfind(substring,[start[,end]])#反向查找S.index(substring,[start[,end]])#同find,只是找不到产生ValueError异常S.rindex(substring,[start[,end]])#同上反向查找S.count(substring,[start[,end]])#返回找到子串的个数S.lowercase()S.capitalize()#首字母大写S.lower()#转小写S.upper()#转大写S.swapcase()#大小写互换S.split(str,‘‘)#将string转list,以空格切分S.join(list,‘‘)#将list转string,以空格连接处理字符串的内置函数len(str)#串长度cmp(“myfriend”,str)#字符串比较。第一个大,返回1max(‘abcxyz’)#寻找字符串中最大的字符min(‘abcxyz’)#寻找字符串中最小的字符string的转换oat(str)#变成浮点数,float(“1e-1″)结果为0.1int(str)#变成整型,int(“12″)结果为12int(str,base)#变成base进制整型数,int(“11″,2)结果为2long(str)#变成长整型,long(str,base)#变成base进制长整型,字符串的格式化(注意其转义字符,大多如C语言的,略)str_format%(参数列表)