zoukankan      html  css  js  c++  java
  • Python函数-3 推导式

    推导式
    Python语言有一种独特的推导式语法,相当于语法糖的存在,可以帮你在某些场合写出比较精简酷炫的代码。

    列表推导式
    列表推导式是一种快速生成列表的方式。其形式是用方括号括起来的一段语句

    lis = [x * x for x in range(1, 10)]
    print(lis)
    ------------------------------------
    结果:[1, 4, 9, 16, 25, 36, 49, 64, 81]
    -------------------------------------------
    如果不用推导式,如何完成这个功能
    lis = []
    for i in range(10):
        lis.append(i*i)
    print(lis)
    打印结果:
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    -------------------------------------------
    列表推导式,还可以增加一些条件,其核心语法是用中括号[]将生成逻辑封装起来
    lis = [i*i for i in range(10) if i%2 == 0]
    print(lis)
    打印结果:
    [0, 4, 16, 36, 64]
    -------------------------------------------
    多重循环
    lis = [a+b for a in '123' for b in 'abc']
    print(lis)
    同时循环a和b两个变量,在进行拼接
    打印结果:
    ['1a', '1b', '1c', '2a', '2b', '2c', '3a', '3b', '3c']
    -------------------------------------------
    更多用法
    dic = {"k1":'v1','k2':'v2'}
    lis = [k+":"+v for k,v in dic.items()]
    print(lis)
    打印结果:
    ['k1:v1', 'k2:v2']
    

    字典推导式
    有列表推导式,那有没有字典推导式呢?答案是有的,使用{}就可以定义了。

    dic = {i:i**3 for i in range(5)}
    print(dic)
    i的三次方
    打印结果:
    {0: 0, 1: 1, 2: 8, 3: 27, 4: 64}
    

    集合推导式
    大括号除了能用作字典推导式,还可以用作集合推导式,两者仅仅在细微处有差别。

    s = {i for i in 'abasrdfsdfa' if i not in 'abc'}
    print(s)
    把abc排除剩余字符串
    打印结果:
    {'r', 'f', 's', 'd'}
    

    有同学会说还有元组推导式,但是在python中元组被用作生成器了。是没有元组推导式的

    tup = (x for x in range(9))  
    print(tup) 
    print(type(tup))  
    打印结果
    <generator object <genexpr> at 0x000000000255DA98>
    <class 'generator'>
    -----------------------------------------------------
    tup = tuple(x for x in range(9))
    print(tup)
    print(type(tup))
    
    打印结果:
    (0, 1, 2, 3, 4, 5, 6, 7, 8)
    <class 'tuple'>
    
    

    面试真题
    看下面代码回答输出的结果是什么?为什么?

    result = [lambda x: x + i for i in range(10)]
    print(result[0](10))
    

    分析:

    result = [lambda x: x + i,lambda x: x + i,lambda x: x + i,....]
    print((lambda x: x + i)(10))
    f = lambda x: x + i
    f(10)
    


    先执行for循环 i只有一个结果就是9
    result[这个是索引](这个是穿进去的值)
    列表推导式 是先执行for循环 这是一个执行顺序的问题

  • 相关阅读:
    WinForm:实现类似QQ消息框一样的右下角消息提示窗口
    WinForm:系统托盘NotifyIcon
    多线程学习系列:(一)前言
    Codeforces Round #176 (Div. 2)总结A. IQ Test
    使用STL的next_permutation函数生成全排列(C++)
    c语言字符串 数字转换函数大全
    c语言中字符串处理函数
    杭电OJ题目分类
    Codeforces Beta Round #77 (Div. 2 Only)A. Football
    算法导论第三版目录
  • 原文地址:https://www.cnblogs.com/sakura579/p/12397360.html
Copyright © 2011-2022 走看看