列表生成式
1、“list Comprehensions”——“列表生成式”,是Python内置的可以快速创建“list”的生成式。
2、“列表生成式”的核心,可以看作是能进行“迭代”操作的对象。可以用来“迭代”的对象都可以生成“列表”。
3、在“列表生成式”中,“for”前面的“if...else”作为表达式,必须以“if...else”的形式出现。而“for”后的“if”是作为过滤条件出现,不可以带“else”。
list_name = list(range(1, 11))
print("list_name = %s" % (list_name))
print()
list_name1 = []
for i in range(1, 11):
list_name1.append(i * i)
print("list_name1 = %s" % (list_name1))
print()
list_name2 = [i * i for i in range(11, 21)]
print("list_name2 = %s" % (list_name2))
print()
list_name3 = [i * i for i in range(1, 11) if i % 2 == 0]
print("list_name3 = %s" % (list_name3))
print()
list_name4 = [x + y + z for x in "ABC" for y in "OPQ" for z in "UVW"]
print("list_name4 = %s" % (list_name4))
print()
dict_name = {'A': 'a', 'B': 'b', 'C': 'c'}
list_name5 = [key + '=' + value for key, value in dict_name.items()]
print("list_name5 = %s" % (list_name5))
print()
list_name_uppercase = ['HELLO', 'OK', 'IBM', 'APPLE']
list_name6 = [s.lower() for s in list_name_uppercase]
print("list_name6 = %s" % (list_name6))
print()
list_name7 = [i for i in range(1, 11) if i % 2 == 0]
print("list_name7 = %s" % (list_name7))
print()
list_name8 = [i if i % 2 == 0 else None for i in range(11, 21)]
print("list_name8 = %s" % (list_name8))
print()
list_name_new = ["Hello", "Apple", 18, 2.5]
list_name9 = [s for s in list_name_new if isinstance(s, str)]
print("list_name9 = %s" % (list_name9))
print()
生成器
1、“Generator”——“生成器”,简单的理解就是将“列表生成式”中的生成“列表”的方法留下,而不生成“列表”,算是“图纸”。
2、第一种定义“Generator”的方法是将“列表生成式”的“[ ]”换成“( )”即可,这样就生成了一个“Generator”对象。
3、第二种定义方式,凡是自定义函数中含有“yield”关键字的函数,就成为了“Generator”。
4、“Generator函数”必须要生成一个“Generator对象”,才能正常实现“Generator”不断获取下一个值的功能。
5、“yield”关键字可以看作是“Generator函数”的特殊“return”,由“yield”来返回“图纸”生成的“对象”,同时“Generator”的调用在这里停止。
6、“next(generator_object_name)”可以获取“Generator”对象的下一个返回值。
generator_name = (i * i for i in range(10))
for i in generator_name:
print(i)
def fib_generator():
a, b = 0, 1
while True:
yield b
a, b = b, a + b
i = 0
f_g = fib_generator()
while i < 6:
print(next(f_g))
i += 1
# 杨辉三角
def triangles():
list_name = [1]
while True:
yield list_name
list_name = [1] + [list_name[i] + list_name[i + 1]
for i in range(0, len(list_name) - 1)] + [1]
def odd():
yield "step 1"
yield "step 2"
yield "step 3"
o = odd()
i = 0
while i < 3:
print(next(o))
i += 1
迭代器
1、集合数据类型“list”、“tuple”、“dict”、“set”、“str”等,“Generator”的函数与对象,这些可以用“for”循环进行“迭代”的,称为“Iterable”——“可迭代对象”。
2、可以被“next()”调用并不断返回下一个值的对象成为“Iterator”——“迭代器”。
3、“isinstance()”也可以用于判断对象是否为“Iterable”或者“Iterator”。
4、“list”、“tuple”、“dict”、“set”、“str”等可迭代对象,可以通过“iter()”变成“Iterator”对象。
5、“Iterator”,表示的是一个惰性计算序列,只有需要返回下一个数据时,才会做出运算。
from collections.abc import Iterator, Iterable
print(isinstance((i for i in range(10)), Iterator))
print()
print(isinstance([], Iterable))
print(isinstance([], Iterator))
print()
print(isinstance(iter([]), Iterator))