精华内容
下载资源
问答
  • Python列表推导式

    万次阅读 多人点赞 2019-05-18 00:51:24
    Python列表推导式 列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表. 一、range()函数 python的range()函数可用来创建一个整数列表,一般用在 for 循环中. range()语法:...

    Python列表推导式

    列表推导式是Python构建列表(list)的一种快捷方式,可以使用简洁的代码就创建出一个列表.

    一、range()函数

    python的range()函数可用来创建一个整数列表,一般用在 for 循环中.

    range()语法:range(start, stop[, step])

    start: 计数从start开始,默认是从0开始(闭区间),如:range(5)等价于range(0,5).

    stop: 计数到stop结束,但不包括stop(开区间).如:range(0,5)是[0, 1, 2, 3, 4],不包含5.

    step:步长,相邻两个值的差值,默认为1.如:range(0,5)相当于range(0, 5, 1).

    为什么要在列表推导式前讲range(),因为列表推导式是通过一个可迭代对象来生成列表的,range()可以说是列表推导式中最常用的可迭代对象了.对列表推导式来说,range()是其中的精髓之一.没有range(),列表推导式的可读性和简洁性将会大打折扣.

    二、列表推导式

    列表推导式(list comprehension)是指循环创建列表.

    for循环有非常广的应用场景,也可以用来创建一个列表,而列表推导式就相当于for循环创建列表的简化版.

    # for循环
    list_a = list()
    for a in range(5):
        list_a.append(a)
    print(list_a)
    # 列表推导式
    list_b = [b for b in range(5)]
    print(list_b)

    上面分别是用for循环和列表推导式创建列表的代码,list_a和list_b的结果是一样的,都是[0, 1, 2, 3, 4].

    下面来看复杂点的列表推导式:

    # in后面跟其他可迭代对象,如字符串
    list_c = [7 * c for c in "python"]
    print(list_c)
    
    # 带if条件语句的列表推导式
    list_d = [d for d in range(6) if d % 2 != 0]
    print(list_d)
    
    # 多个for循环
    list_e = [(e, f * f) for e in range(3) for f in range(5, 15, 5)]
    print(list_e)
    
    # 嵌套列表推导式,多个并列条件
    list_g = [[x for x in range(g - 3, g)] for g in range(22) if g % 3 == 0 and g != 0]
    print(list_g)

    运行结果:

    ['ppppppp', 'yyyyyyy', 'ttttttt', 'hhhhhhh', 'ooooooo', 'nnnnnnn']
    [1, 3, 5]
    [(0, 25), (0, 100), (1, 25), (1, 100), (2, 25), (2, 100)]
    [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14], [15, 16, 17], [18, 19, 20]]

    代码解释:

    1.列表推导式会遍历后面的可迭代对象,然后按照for前的表达式进行运算,生成最终的列表.

    2.如果有if条件语句,for遍历后紧跟着进行条件判断.

    3.如果有多个for循环,则最终的数据数量为多个for循环的笛卡尔积.

    4.可以进行嵌套的列表推导,与嵌套for循环的原理相同.

    三、代码可读性

    对于不熟悉列表推导式的人来说,可以使用for循环来实现相同的功能,但是需要好几行代码,而列表推导式只需要一行代码.

    很多人会说代码简洁了但可读性降低了,其实不然,当我们对列表推导式熟悉(自己写几次就熟悉了),代码的功能一眼就能轻松地看出来,但是for循环代码基本不可能一眼看完.尤其当创建列表的for循环嵌套在业务逻辑的其他for循环里时,恰恰是使用列表推导式的可读性最高.

    同时,在Python3中列表推导式有自己的局部作用域,就像函数似的.表达式内部的变量和赋值只在局部起作用,表达式的上下文里的同名变量还可以被正常引用,局部变量并不会影响到它们.

    也就是说,列表推导不会有变量泄漏的问题,在列表推导中的赋值操作不可能会影响到列表推导上下文中的同名变量.

    当然,也不是所有场景都推荐使用列表推导式.比如说:如果列表推导的代码超过了两行,就要考虑改成用for循环了.超过了两行的列表推导式就真的没有可读性了.通常的原则是,只用列表推导来创建新的列表,并且尽量保持简短.

    四、字典推导式

    自Python2.7以来,列表推导概念就移植到了字典上,从而有了字典推导(后面还会看到集合推导).

    如果列表推导的概念已经为你所熟知,接受字典推导并不难.直接看代码吧:

    # 因为key是唯一的,所以最后value都是1
    dict_a = {key: value for key in 'python' for value in range(2)}
    print(dict_a)
    
    # 可以根据键来构造值
    dict_b = {key: key * key for key in range(6)}
    print(dict_b)
    
    # 遍历一个有键值关系的可迭代对象
    list_phone = [('HUAWEI', '华为'), ('MI', '小米'), ('OPPO', 'OPPO'), ('VIVO', 'VIVO')]
    dict_c = {key: value for key, value in list_phone}
    print(dict_c)

    运行结果:

    {'p': 1, 'y': 1, 't': 1, 'h': 1, 'o': 1, 'n': 1}
    {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
    {'HUAWEI': '华为', 'MI': '小米', 'OPPO': 'OPPO', 'VIVO': 'VIVO'}

    五、集合推导式

    Python2.7不仅带来了字典推导式,还带来了集合推导式.

    同样的,我们直接看代码,这样可以直观的看到集合推导式.

    # 遍历一个可迭代对象生成集合
    set_a = {value for value in '有人云淡风轻,有人负重前行'}
    print(set_a)
    

    运行结果:

    {'负', '有', '人', '轻', '前', '云', '重', ',', '淡', '风', '行'}

    集合是无序且不重复的,所以会自动去掉重复的元素,并且每次运行显示的顺序不一样.

    从上面的代码中可以总结:

    集合推导式就是将列表推导式的[]换成{},字典推导式就是推导出两个值并构建成键值对的样子.

    另外,不管是字典推导式还是集合推导式,后面都可以像列表推导式一样接if条件语句,嵌套循环等,具体可以根据您自己的需求来使用.


    关注工重号可以领资料和学习交流。

     

    展开全文
  • 列表推导式 和 字典推导式在python中常用,但是有时候经常混淆,语法上也略有区别,随手写下,给自己做个记录 列表推导式 a = [0,1,2,3,4,5,6,7,8,9] b = [i+100 if i > 5 else 0 for i in a ] print('b : ',b...

    列表推导式 和 字典推导式在python中常用,但是有时候经常混淆,语法上也略有区别,随手写下,给自己做个记录

    列表推导式

    a = [0,1,2,3,4,5,6,7,8,9]
    b = [i+100 if i > 5 else 0 for i in a ]
    print('b : ',b)

    输出:

    注意:条件语句 在for之前

    这个顺序能否颠倒呢?

    a = [0,1,2,3,4,5,6,7,8,9]
    b = [i+100  for i in a if i > 5 else 0]
    print('b : ',b)

    报错:

     

    字典推导式

    a = [0,1,2,3,4,5,6,7,8,9]
    c = {i:i+100  for i in a if i > 5 }
    print("c : ",c)

    输出:

    注意:条件语句在for之后

    这个顺序能否颠倒呢?

    a = [0,1,2,3,4,5,6,7,8,9]
    c = {i:i+100 if i > 5 for i in a  }
    print("c : ",c)

    报错:

    能不能在后面加上else呢?

    a = [0,1,2,3,4,5,6,7,8,9]
    c = {i:i+100  for i in a  if i > 5 else i:i}
    print("c : ",c)

    依然报错:

     

    仅此记录。如果发现错误或者不足,欢迎留言告知,谢谢!

    展开全文
  • 二.Python 列表推导式语法 三.Python 列表推导式练习 1.Python 列表推导式案例一 2.Python 列表推导式案例二 3.Python 列表推导式和循环效率对比 四.重点总结 五.猜你喜欢 零基础 Python 学习路线推荐 : Python...

    目录

    零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门

    一.Python 列表推导式简介

    上一篇文章中我们介绍了 Python 条件推导式实际上就是把多行代码合并为一行代码的操作,使用列表推导式可以让程序的运行效率更高(文章末尾有具体讲解),其实列表推导式其实和条件推导式类似;

    Python 列表推导式是从一个或者多个迭代器快速简洁地创建数据类型的一种方法,它将循环和条件判断结合,从而避免语法冗长的代码,提高代码运行效率能熟练使用推导式也可以间接说明你已经超越了 Python 初学者的水平**。**

    Python 推导式相关:

    二.Python 列表推导式语法

    列表推导式是条件推导式和循环一起配合使用,并返回一个列表 list,并且整个表达式需要在[]内,因为返回值也是列表 list。

    '''
    语法一:
        exp1:在for循环中,如果x的值满足条件表达式condition(即条件表达式成立),返回exp1;条件表达式不成立则不返回
        x:for循环中变量
        data:一个序列(比如:列表/元组/字符串等)
        condition:条件表达式
    '''
    
    [exp1 for x in data if condition]
    
    '''
    语法二:
        exp1:在for循环中,如果x的值满足条件表达式condition(即条件表达式成立),返回exp1;条件表达式不成立则返回exp2
        condition:条件表达式
        exp2:在for循环中,如果x的值满足条件表达式condition(即条件表达式成立),返回exp1;条件表达式不成立则返回exp2
        x:for循环中变量
        data:个序列(比如:列表/元组/字符串等)
    
    '''
    
    [exp1 if condition else exp2 for x in data]
    

    三.Python 列表推导式练习

    1.Python 列表推导式案例一

    获取 0 ~ 20 的所有偶数并且乘以 10,并返回所有计算之后的结果。示例代码如下:(使用 Python 列表推导式语法一实现)

    # !usr/bin/env python
    # -*- coding:utf-8 _*-
    """
    @Author:猿说编程
    @Blog(个人博客地址): www.codersrc.com
    @File:Python Python 列表推导式.py
    @Time:2021/3/27 08:00
    @Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    
    """
    
    '''
    1.因为是获取0~20,包括20,所以使用range(0,21)
    2.x*10 等价 语法一中的exp1
    3.x%2 == 0 等价 语法一中的条件表达式condition
    4.range(0,21) 等价 语法一中的data(序列)
    '''
    
    list1 = [x*10 for x in range(0,21) if x%2 == 0] 
    print(list1)
    print(type(list1))
    
    '''
    输出结果:
    [0, 20, 40, 60, 80, 100, 120, 140, 160, 180, 200]
    <class 'list'>
    
    '''
    

    2.Python 列表推导式案例二

    将 0 ~ 20 的偶数乘以 10 ,奇数乘以 100 ,并返回所有计算之后的结果。示例代码如下:(使用 Python 列表推导式语法二实现

    # !usr/bin/env python
    # -*- coding:utf-8 _*-
    """
    @Author:猿说编程
    @Blog(个人博客地址): www.codersrc.com
    @File:Python Python 列表推导式.py
    @Time:2021/3/27 08:00
    @Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    
    """
    
    '''
    1.因为是获取0~20,包括20,所以使用range(0,21)
    2.x*10 等价 语法二中的exp1
    3.x*100 等价 语法二中的exp2
    4.x%2 == 0 等价 语法二中的条件表达式condition
    5.range(0,21) 等价 语法一中的data(序列)
    '''
    
    list2 = [x*10 if x%2 == 0 else x*100 for x in range(0,21) ]
    print(list2)
    print(type(list2))
    
    '''
    输出结果:
    [0, 100, 20, 300, 40, 500, 60, 700, 80, 900, 100, 1100, 120, 1300, 140, 1500, 160, 1700, 180, 1900, 200]
    <class 'list'>
    
    '''
    

    3.Python 列表推导式和循环效率对比

    可能有童鞋纳闷,我明明 for 循环 或者 while 循环就能实现的功能,为毛要用这鸟玩意推导式?

    使用列表推导式的效率远远高于 for 循环,可能执行一句 print(“helloworld”) 对于 cpu 而已只需要 0.0002 秒,你可能感觉不到差距,如果需要输出一亿次 helloworld 呢?往往细节觉得成败!

    假如有一个需求:将 0 ~ 10000000 (一亿)以内的所有整数存到列表中,对比一下 Python 列表推导式 和 for 循环耗时情况:

    # !usr/bin/env python
    # -*- coding:utf-8 _*-
    """
    @Author:猿说编程
    @Blog(个人博客地址): www.codersrc.com
    @File:Python Python 列表推导式.py
    @Time:2021/3/27 08:00
    @Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    
    """
    
    import time # 添加time模块,用于统计代码运行时间
    
    #一共添加10000000次数据到列表中
    total_num = 10000000
    
    #使用列表推导式
    start_time = time.time()
    list1 = [x for x in range(0,total_num)] # 列表推导式
    end_time = time.time()
    print("使用列表推导式耗时:{}秒".format(end_time-start_time))
    
    #使用普通for循环
    start_time = time.time()
    list2 = list()
    for x in range(0,total_num): # for循环
        list2.append(x)
    end_time = time.time()
    print("使用普通for循环耗时:{}秒".format(end_time-start_time))
    
    '''
    输出结果:
    使用列表推导式耗时:0.5455152988433838秒
    使用普通for循环耗时:1.2068836688995361秒
    '''
    

    输出结果很明显,实现通用的功能,Python 列表推导式的效率整整高出普通 for 循环一倍。

    最后温馨提醒:测试请把循环次数改小一点,毕竟刚开始不小心多加了几圈圈,电脑死机了!

    四.重点总结

    • 1.注意在 Python 列表推导式书写的时候,所有表达式都必须在 [] 内部,因为返回值是列表 list
    • 2.列表推导式是 Python 开发学习的知识点,多多联系,熟能生巧.

    五.猜你喜欢

    1. Python 配置环境
    2. Python 变量
    3. Python 运算符
    4. Python 条件判断 if/else
    5. Python while 循环
    6. Python break
    7. Python continue
    8. Python for 循环
    9. Python 字符串
    10. Python 列表 list
    11. Python 元组 tuple
    12. Python 字典 dict
    13. Python 条件推导式
    14. Python 列表推导式
    15. Python 字典推导式

    未经允许不得转载:猿说编程 » Python 列表推导式

    展开全文
  • python列表推导式

    2021-05-29 07:07:23
    python基础——列表推导式 ...2 列表推导式语法 基本格式如下: [expr for value in collection if condition] 过滤条件可有可无,取决于实际应用,只留下表达式 列表推导式例子: 1 2 l=...
    python基础——列表推导式

    1 列表推导式定义

    列表推导式能非常简洁的构造一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形

    2 列表推导式语法

    基本格式如下:

    [expr    for value in collection     if  condition]

    过滤条件可有可无,取决于实际应用,只留下表达式

    列表推导式例子:

    1
    2
    l=["egg%s"%for in range(10)]
    print(l)

    类似于这段for代码:

    1
    2
    3
    4
    egg_list=[]
    for in range(10):
        egg_list.append("egg%s"%i)
    print(egg_list)

    列表推导式还可以加更多的if判断for循环

    1
    2
    3
    4
    l=['egg%s' %for in range(1,101)]
    l=['egg%s' %for in range(1,101if i >50 ]
    l=['egg%s' %for in range(1,101if i >50 if i<60]
    print(l)

    3 列表推导式优点

    方便,改变了编程习惯,属于声明式编程

    举例:

    1
    2
    3
    4
    l=[1,2,3,4]
    s="hello"
    l1=[(num,i) for num in for in s]
    print(l1)

    输出结果为:  

    1
    [(1'h'), (1'e'), (1'l'), (1'l'), (1'o'), (2'h'), (2'e'), (2'l'), (2'l'), <br>(2'o'), (3'h'), (3'e'), (3'l'), (3'l'), (3'o'), (4'h'), (4'e'), (4'l'), <br>(4'l'), (4'o')]

    这个列表推导式相当于:

    1
    2
    3
    4
    5
    6
    7
    8
    l=[1,2,3,4]
    s="hello"
    l1=[]
    for num in l:
        for in s:
            t=(num,i)
            l1.append(t)
    print(l1)

    4 列表表达式例子

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import os
    g=os.walk("C:\python_fullstack_wen\day24\wen")
    file_path_list=[]
    for in g:
        for in i[-1]:
            file_path_list.append("%s\\%s"%(i[0],j))
    print(file_path_list)
    g=os.walk("C:\python_fullstack_wen\day24\wen")
    file_path_list=["%s\\%s"%(i[0],j) for in for in i[-1]]
    print(file_path_list)

    输出结果:

    1
    2
    ['C:\\python_fullstack_wen\\day24\\wen\\yan1.txt''C:\\python_fullstack_wen\\day24\\wen\\wen1<br>\\yan1.txt''C:\\python_fullstack_wen\\day24\\wen\\wen1\\jie1\\yan1.txt', <br>'C:\\python_fullstack_wen\\day24\\wen\\wen1\\yan1\\yan1.txt', <br>'C:\\python_fullstack_wen\\day24\\wen\\wen2\\yan2.txt']
    ['C:\\python_fullstack_wen\\day24\\wen\\yan1.txt''C:\\python_fullstack_wen\\day24\\wen\\wen1\\yan1.txt''C:\\python_fullstack_wen\\day24\\wen\\wen1\\jie1\\yan1.txt''C:\\python_fullstack_wen\\day24\\wen\\wen1\\yan1\\yan1.txt''C:\\python_fullstack_wen\\day24\\wen\\wen2\\yan2.txt']
    展开全文
  • Python 列表推导式

    2021-01-28 16:02:11
    前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行...列表推导式的执行顺序:各语句之间是嵌
  • 这篇文章主要介绍了python列表推导式入门学习解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.什么是推导式 推导式是从一个或者多个迭代器快速简洁地...
  • python 列表推导式

    2020-02-21 10:11:43
    列表推导式 所谓的列表推导式,就是指的轻量级循环创建列表 先介绍一下range函数 基本语法 range(start, stop[, step]) start: 计数从 start 开始。默认是从 0 开始 stop: 计数到 stop 结束,但不包括 stop step:...
  • 列表推导式语法与应用案例 列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句。那个表达式可以是...
  • 基本语法:我们将列表推导式写在一个方括号内,就会生成一个列表。如: 只要支持for循环进行迭代的对象,都可以使用列表推导式。 带判断的列表推导式: for嵌套: 列表推导式还有更高级应用,但比较难理解,此处不...
  • 列表推导式语法与应用案例 列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表。它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 ...
  • python列表推导式for的用法 列表推导式的作用:利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表 语法格式: <表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] > ps:...
  • 推导式 作用:按一定的逻辑顺序,生成列表,简单且快捷 语法一:[ 表达式 for 变量 in 旧列表 ] 例如生成一个[1,2,3,4,5,6,7]列表 [x for x in range(1,8)] 或者生成一个[1,4,9,16,25,36,49,64,81]的列表 [x*x ...
  • 列表解析式(List comprehension)或者称为列表推导式,是 Python 中非常强大和优雅的方法。它可以基于现有的列表做一些操作,从而快速创建新列表。在我们第一次见到列表推导式时,可能会感觉这种方法非常炫酷,因此...
  • list comprehansions列表推导式过滤形式语法: [ expression for item in list if conditional] 解析及运行原理: 1.for循环遍历list赋值给item。 2.conditional判断每一个被赋值的item是否满足条件,满足才执行...
  • 在各种稀奇古怪的语法中,列表推导式的使用频率应该时最高的,对于代码的简化效果也非常明显。比如,求列表各元素的平方,通常应该这样写(当然也有其他写法,比如使用map函数): >>> a = [1, 2, 3, 4, 5]...
  • 列表推导式语法格式如下: [表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ] 此格式中,[if 条件表达式] 不是必须的,可以使用,也可以省略。 通过列表推导式语法格式,明显会感觉到它和 for 循环存在...
  • 推导式(又称解析器),是 ...Python列表推导式 列表推导式可以利用 range 区间、元组、列表、字典和集合等数据类型,快速生成一个满足指定需求的列表。 列表推导式的语法格式如下: variable = [out_exp for out...
  • 列表解析式(List comprehension)或者称为列表推导式,是 Python 中非常强大和优雅的方法。它可以基于现有的列表做一些操作,从而快速创建新列表。在我们第一次见到列表推导式时,可能会感觉这种方法非常炫酷,因此...
  • 列表推导式 列表推导式提供了从列表、元组创建列表的简单途径。语法: [表达式 for语句 if语句] 创建并返回一个列表。if语句可选。 示例: list1=[1,2,3,4] #使用元组也行 list2=[x*2 for x in list1] print...
  • Python有一个相当特殊也相当强大的语法列表(list)的“推导式”(comprehension),相信大家也都听说过。 >>> [a for a in range(5)] [0, 1, 2, 3, 4] 以前python的list comprehension被翻译成“列表...
  • 列表推导式通常有以下几种语法格式: (1)生成指定范围的数值列表 基本语法如下: list=[Expression for var in range] list: 表示生成的列表名称 Expression: 表带是,用于计算新列表的元素 var: 循环变量 range:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 571
精华内容 228
关键字:

python列表推导式语法

python 订阅