码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-08-29 17:09:42      阅读:186      评论:0      收藏:0      [点我收藏+]

标签: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(列表解析、生成器、字典和集合)

标签:python

原文地址:http://wukong0716.blog.51cto.com/10442773/1689530

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!