Python基础知识-Part7:高级特性之列表生成式、生成器、迭代器

列表生成式

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))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值