栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

小白学Python DAY 4

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

小白学Python DAY 4

列表推导式,生成器,迭代器
列表推导式:格式:[表达式 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()转换
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/998397.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号