标签:python
产生列表可以用range();
列表解析
对一个序列进行解析生成新的列表;列表解析比for的性能好很多;
a=[x for x in range(0,10) if x > 5] print a a=[x+1 for x in range(0,10) if x > 5] print a
利用列表中的表达式可以得出所需的列表,无需在用for循环得到;
双重嵌套:用更简便的语句得出里列表:
a=[(x,y) for x in range(3) for y in range(3)] print a
解析器中提供了很多的内建函数:
filter(function,iter)
fuction是一个函数,只接受一个参数,就是传进来的iter的这个序列,返回一个过滤后的序列;
返回的值是iter中的值,满足的返回,fuction为真的返回;
map(function,iter)
function是一个函数,依次接受iter列表中的所有元素,对应返回值产生一个列表;
def f(x): return x%5==0 def u(x): return x+1 a = filter(f,range(0,100)) print a a = map(u,range(0,10)) print a
列表解析的缺点就是内存效率太低;因此提出了:
生成器表达式
每次只把一个元素加载再返回,与列表解析唯一的语法不同就是用的元括号,返回的是一个列表头指针
,得到指针后,需要用for循环得出;
a = (x for x in range(0,10) if x%3==0) print a for i in a: print i
condition为非0时,即为要返回的元素,为0时,则为false
xrange
range的生成器版本,在大范围的需求下,用这个;和range的用法一样
for i in xrange(0,9999999): if i%999==0: print i
字典和集合
字典
字典是无序的键值对,基于哈希表实现,key可以被hash;通过哈希函数算出哈希值,而后取值;
可以做建的类型(内容不可变):
一般建议用字符串;类实例做key,需实现hash方法返回哈希值,列表和字典不可以做key,因为列表和字典可变;元组可做key,内不可含有列表。。;
可以通过内建的hash()函数,来判断是否可以做为键值;
创建字典:{key:value},也可以用dict()工厂函数来创建
a={‘a‘:1,‘b‘:2} print a a=dict(a=‘c‘,b=2) print a print a.get(‘c‘,‘not exist‘)
dict()函数创建使,key默认是字符串,value默认也是,数字可以直接写;
在不确认字典中是否有键时,可以用字典的get方法去取,不会报错,返回default值,这是一个很安全的操作;
del dict[key]可删除,dict[‘无‘]=3,若这个键没有,则创建;
查找键:
keys函数返回字典中存在的键,返回的是一个列表
a={‘a‘:1,‘b‘:2,‘c‘:3} b = a.keys() print b
集合(set)
a = set([1,2,3]) b = list([1,2,3,4]) b.append(5) a.add(5)
set集合里面的值是唯一的,添加元素用add方法,update可以同时更新一组序列;
集合可进行联合,交集,差集和异或操作。
题目:
设计一个函数zip(lista,listb,repl),输入两个列表和占位符,返回一个新的列表,列表里面的每一个元素是一个元组,元组的元素是对应同样顺序的在lista和listb中的元素,如果长度不相同,则用占位符来代替。
def zip(lista,listb,repl): lena = len(lista) lenb = len(listb) length = 0 list = [] if lena < lenb: length = lena else: length = lenb for i in range(0,length): list.append((lista[i],listb[i])) if lena > length: for i in range(length,lena): list.append((lista[i],repl)) if lenb > length: for i in range(length,lenb): list.append((repl,listb[i])) print list zip([1,2,3],[4,5,6],"a") zip([1,2,3],[4],"b")
标签:python
原文地址:http://wukong0716.blog.51cto.com/10442773/1689530