您的位置:首页 > 编程语言 > Python开发

学习日志---python(列表解析、生成器、字典和集合)

2015-08-29 08:47 796 查看
产生列表可以用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