赞
踩
是Python内置的非常简单却强大的可以用来创建list的生成式
具体可根据如下案例理解,且代码也是可用的
""" 1、 生成[0,1,2,3,4,5,6]这样列表 """ print(list(range(0, 7))) """ 2、 生成[0,1,4,9,16,25]的列表, 即:0*0,1*1,2*2.....5*5 """ # 1) 基本方法-繁琐方法 list1 = list() for one in range(0, 6): list1.append(one * one) # 2) 列表表达式-简化方式 list1 = [one * one for one in range(0, 6)] print(list1) """3、【if判断】获取1到20之间的属于偶数的正整数""" list2 = [x for x in range(1, 21) if x % 2 == 0] print(list2) """4、【双for循环】遍历两列表,并逐一组合条件""" M, N = ["A1", "B1", "C1"], ["M", "N", "C1"] list3 = [f"{m}+{n}" for m in M for n in N if m != n] list4 = [f"{m}+{n}" if m != n else m for m in M for n in N] # 如果有else条件, if 和else逻辑均在for前 print(list3) print(list4) """5、【遍历dict】提取用户信息,并列表存储,元素= 属性=属性值""" student1 = {"name": "Lujier", "sex": "Female", "height": 1.65, "hair": "long"} stu_info_list = [f"{stu_key}={stu_value}" for stu_key, stu_value in student1.items()] print(stu_info_list)
通过学习列表表达式, 我们能够快速创建列表,但是:列表容量是有限的, 如果想要创建大数量的列表,会占用很大的内存空间,,但有时候我们并不是所
有元素都会去访问,相当于可能会浪费空间。 故而便有了“生成器”
(generator)这样的概念, 可以在循环的过程中不断推算出后续的元素,这样
就无需直接创建完整的list,就节省了大量空间, 至于如何创建生成器&生成器
元素访问, 可根据下方截图案例自行尝试。
[关键字] 惰性计算的序列、next()
# 1、 基本内容 L = [x * x for x in range(5)] # print(L) g = (x * x for x in range(5)) print(g) # 通过next()函数获得generator的下一个返回值 print(next(g)) print(next(g)) print(next(g)) print(next(g)) print(next(g)) # 无元素可访问,会报错StopIteration print(next(g)) for one in g: print(one)
#2、 经典案例-斐波拉契 # [普通实现]斐波拉契数列用列表生成式-前n个数 def fibonacci_sequence(num): n, current_before, current = 1, 0, 1 while n < num + 1: print(current) n, current_before, current = n + 1, current, current_before + current # [生成器]斐波拉契数列 def fib(num): n, current_before, current = 1, 0, 1 while n < num + 1: yield current n, current_before, current = n + 1, current, current_before + current fibonacci_sequence(7) print(fib(7)) mm = fib(7) print(next(mm)) print(next(mm))
# 3、经典案例3-杨辉三角
def triangles(top_num):
n, before, current = 2, [1], [1, 1]
while n < top_num + 1:
yield before
n, before = n + 1, current
current = [1] + [current[index] + current[index +
基础理解: 一、 可被for循环的数据类型有: 1、 【基础数据类型】 list、tuple、str、dict、set 2、 generator: 包含生成器和生成器函数(yield) 二、 可迭代对象(Iterable)概念 可以直接用for循环的对象统称为可迭代对象 可以用isinstance()判断是否是可迭代对象,具体如下: from collections.abc import Iterable aaa = triangles(7) print(isinstance(aaa, Iterable)) # 结果返回true 三、 迭代器(Iterator)概念: 迭代器: 可以被next()函数调用并不断返回下一个值的对象称为迭代器 生成器: 可以作用于for循环,还可以next返回下一个值,直到越界抛出StopIteration 四、生成器、迭代器区别 生成器都是:迭代器 可迭代对象不一定是迭代器: 如: list、dict、str 对于是可迭代对象的类型但又不是迭代器,那么其实是可以转化的: iter()函数 【注】 以上所有内容见如下代码案例:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。