小白学Python DAY 4

本文详细介绍了列表推导式、生成器和迭代器在Python编程中的使用,包括基本语法、示例代码以及它们在实际项目中的应用场景。通过实例演示了如何过滤列表、创建元组、集合和字典,以及生成器的工作原理和协程的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

列表推导式,生成器,迭代器

列表推导式:格式:[表达式 for 变量 in 旧列表]
                 [表达式 for 变量 in 旧列表 if 条件]
# 过滤掉长度小于等于三的人名
# 方式1---》列表推导式(方便)
names = ['tom', 'lily', 'jack', 'steven', 'bb']
result = [name for name in names if len(name) > 3]
print(result)
result1 = [name.capitalize() for name in names if len(name) > 3]  # 将得到的人名首字母进行大写
print(result1)
# 方式2---函数
def func():
    names = ['tom', 'lily', 'jack', 'steven', 'bb']
    newlist = []
    for name in names:
        if len(name) > 3:
            name1=name.capitalize()  # 将得到的人名首字母进行大写
            newlist.append(name1)
    print(newlist)


func()
# 将1-100中能被三和五整除的组成一个新的列表
newlist = [i for i in range(1, 101) if i % 3 == 0 and i % 5 == 0]
print(newlist)
元组列表:[(偶数,奇数),(),(),()]  [(0,1),(0,3),(0,5),(0,7),(0,9),(2,1),(2,3),,,]
# 方式1---》列表推导式
newlist = [(x, y) for x in range(5) if x % 2 == 0 for y in range(10) if y % 2 != 0]
print(newlist)
# 方式2---》函数
def func():
    newlist = []
    for i in range(5):
        if i % 2 == 0:  # 偶数
            for j in range(10):
                if j % 2 != 0:  # 奇数
                    newlist.append((i, j))  # 元组中
    return newlist


x = func()  # 有返回值必须接
print(x)
'''
练习:
list1=[[1,2,3],[4,5,6],[7,8,9],[1,3,5]]---->[3,6,9,5]
如何得到[3,6,9,5]
'''
list1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 3, 5]]
newlist = [i[-1] for i in list1]#i[-1]取列表中最后一个元素,,,i表示列表中元素
print(newlist)

 

集合推导式(不允许有重复元素)
类似于列表推导式,在列表推导式的基础上添加了一个去除重复项
list1 = [1, 2, 3, 4, 5, 6, 2, 2, 1, 5, 8, 5]
print(set(list1))
set1 = {x + 1 for x in list1}
print(set1)
set2 = {x-1 for x in list1 if x>5}
print(set2)
字典推导式
dict1 = {'a': 'A', 'b': 'B', 'c': 'C'}
newdict = {value:key for key, value in dict1.item()}
print(newdict)
生成器:generator
得到生成器方式
    通过列表推导式得到生成器
g=(x*3 for x in range(10))
while True:
    try:
        e=next(g)
        print(e)
    except:
        print('没有更多元素啦!')
        break
    用函数得到生成器
      1.定义一个函数,函数中使用yield关键字
      2.调用函数,接收函数的结果
      3.得到的结果就是生成器
      4.借助于next()  或者 __next__()   得到元素
def fib(length):
    a, b = 0, 1
    n = 0
    while n < length:
        yield b  # return b+暂停
        a, b = b, a + b
        n += 1
    return '没有更多元素了'#return 就是在得到StopIteration后的提示信息

g = fib(8)
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
print(next(g))
生成器方法
    __next__():获取下一个元素
    send(value):向每次生成器调用中传值,第一次调用:send(None)
def gen():
    i = 0
    while i < 5:
        temp = yield i  # return 0+暂停
        print('temp', temp)
        for x in range(temp):
            print('-------',i)
        print('*****')
        i += 1
    return '没有更多数据'


g = gen()
# g.__next__()
print(g.send(None))#第一次传值
n1 = g.send(3)
print(n1)
n2 = g.send(5)
print(n2)
生成器的应用:协程
# 1协程  交替进行。通过协程,可以控制打印顺序
def task(n):
    for i in range(n):
        print('正在搬第{}块砖'.format(i))
        yield None


def task1(n):
    for i in range(n):
        print('正在听第{}首歌'.format(i))
        yield None


g1 = task(2)
g2 = task1(3)
while True:
    try:
        g1.__next__()
        g2.__next__()
    except:
        pass
生成器总结

生成器:generator
定义生成器的方式
1.通过列表推导式方式
    g=(x+1 for x in range(6))
    
2.函数 yield
    def func():
        ...
        yield
    g=func()
 产生元素
    1.next(generator)---->每次调用都会产生一个新元素,如果新元素产生完毕,再次调用的话就会产生异常
    2.生成器自己的方法:
        g.__next__()
        g.send(value)
应用:协程
可迭代的对象:1.生成器
            2.元组,列表,集合,字典,字符串

如何判断一个对象是否是可迭代的


from collections import Iterable

list1 = [1, 4, 7, 8, 8]
f = isinstance(list1, Iterable)  # True
print(f)
f = isinstance('abc', Iterable)  # True
print(f)
f = isinstance(100, Iterable)  # False
print(f)
g = (x + 1 for x in range(10))#生成器也可迭代
f = isinstance(g, Iterable)
print(f)
什么是迭代器?
    迭代是访问集合元素的一种方式,迭代器是一个可以记住遍历的位置的对象
    迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问结束
    迭代器只能往前不会后退
    可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
可迭代的 是不是肯定就是   迭代器?
    list是可迭代的,但不是迭代器
# list是可迭代的,但不是迭代器
list1 = [1, 3, 5, 3, 6]
print(next(list1))  # 'list' object is not an iterator

# 通过iter()函数可将可迭代的变成一个迭代器
list1 = [2, 3, 5, 6, 6, 4]
list1 = iter(list1)
print(next(list1))
生成器与迭代器
生成器是可迭代的,也是迭代器
 生成器是迭代器的一部分
  1.需要借助iter()转换
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值