学习日志---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")
时间: 2024-07-31 12:42:10

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

Python成长笔记 - 基础篇 (三)python列表元组、字典、集合

本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码   一.列表和元组的操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 names = ["Wang","HouZi1","NiuNiu","ZhouYi","HouZi2",[1,2]] 可以通过列表角标的方式去获得list中的值 print(names)print(nam

python列表解析和生成器表达式

列表解析在需要改变列表而不是需要新建某列表时,可以使用列表解析.列表解析表达式为: [expr for iter_var in iterable] [expr for iter_var in iterable if cond_expr] 第一种语法:首先迭代iterable里所有内容,每一次迭代,都把iterable里相应内容放到iter_var中,再在表达式中应用该iter_var的内容,最后用表达式的计算值生成一个列表. 第二种语法:加入了判断语句,只有满足条件的内容才把iterable里相

python列表解析

#!/bin/env python #这句会生成一个列表[0,1,2,3,4,5,6,7,8,9] list_a = [item for item in range(10) ] #下面对这个列表进行筛选(条件为偶数) list_b = [item for item in list_a if(item%2==0)] #这样就可以筛选出列表中的偶数 #其实列表解析可以看成是这样的 #[变量(或变量运算表达式)      迭代器(可迭代对象 相当于是一个for循环)     筛选条件] #下面这个会生

列表解析、字典解析

列表解析 创建一个整数列表 number_list = [number for number in range(1,6)] number_list [1, 2, 3, 4, 5] 使用条件表达式 number_list = [number-1 for number in range(1,6)] number_list [0, 1, 2, 3, 4] 创建一个1-5之间的偶数列表 number_list = [number for number in range(1,6) if number % 

浅析python列表解析和迭代

要看懂列表解析,首先要知道几个定义,第一个是python的解释器,虽然大多数时候,我们都将python当作一门编程语言来看待,实际上,python也是一个名为解释器的软件包,解释器是一种能让其他程序运行起来的程序,如果你写了一段代码,让python解释器读取程序,并且按着命令执行,得出结果,实际上,解释器是代码雨计算机硬件之间的软件逻辑层,计算机上安装的python程序就是一个解释器和一些基本的库,例如os,sys模块,是最基本的包.值得一提的是在python的解释器里面运行.第二个是迭代器(i

Python学习-39.Python中的生成器

先回顾列表解释 1 lista = range(10) 2 listb = [elem * elem for elem in lista] 那么listb就将会是0至9的二次方. 现在有这么一个需求,需要存储前10个斐波那契数到硬盘. 那么先写产生斐波那契数的函数: 1 def fib(max): 2 n,a,b = 0,0,1 3 while n < max: 4 print(b) 5 a,b = b,a + b 6 n+=1 这样就会打印出前max个斐波那契数了.接着我们再修改一下.(因为我

[转载] Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结

创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_start = sample_list[0] end_value = sample_list[-1] 删除列表的第一个值 del sample_list[0] 在列表中插入一个值 sample_list[0:0] = ['sample value'] 得到列表的长度 list_length = len(sa

Python__三元表达式+列表解析+生成器表达式

x = 10res = 'ok' if x > 3 else 'no'print(res)#列表解析l = ['egg%s'%i for i in range(10)]print(l)l = ['egg%s'%i for i in range(10) if i > 5]print(l)names = ['alex_sb','egon','wupeiqi_sb','yuanhao_sb']names_new = [name for name in names if name.endswith('

Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结

[python] view plaincopy 创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_start = sample_list[0] end_value = sample_list[-1] 删除列表的第一个值 del sample_list[0] 在列表中插入一个值 sample_list[0:0] = ['sample value'] 得到列表