码迷,mamicode.com
首页 > 其他好文 > 详细

列表解析式

时间:2019-08-26 22:36:08      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:员工   整数   join   and   练习   rom   返回值   rand   实现   

列表解析式

标签(空格分隔): Python-解析式



列表解析式

  • 生成一个列表, 元素 0~9,最每一个元素自增 1后,求平方,返回列表

    # 普通实现
    lst = []
    for i in range(10):
        lst.append((i+1)**2)
    
    # 列表解析式实现
    lst = [(i+1)**2 for i in range(10)]
  • 语法
    • [返回值 for 元素 in 可迭代对象 if 条件]
    • 使用中括号 [], 内部式 for 循环 , if 条件语句可选
    • 立即返回一个新列表
  • 列表解析式是一种语法糖
    • 编译器会优化,不会因为简写而影响效率, 反而因优化而提高了效率
    • 减少程序员工作量,减少出错
    • 简化代码,增加可读性

列表解析式进阶

  • 语法
    • [expr for i in iterable1 for j in iterable2]
    • 等价写法:
    lst = []
    for i in itersble1:
        for j in iterable2:
            lst.append((x, y))
    
  • 语法
    • [expr for i in iterable1 if cond1 if cond2]
    • 等价写法:
    lst = []
    for i in itersble1:
        if cond1:
            if cond2:
                lst.append(i)
    
    >>> 等价于
    for i in iterable1:
        if cond1 and cond2:
            lst.append(i)
    

练习题

  • 返回 1-10 平方的列表
    print([i**2 for i in range(1, 11)])

  • 有一个列表 lst = [1, 4, 9, 16, 2, 5, 10, 15],生成一个新列表,要求新元素是lst相邻2项的和
    lst = [1, 4, 9, 16, 2, 5, 10, 15] length = len(lst) print([lst[i]+lst[i+1] for i in range(length-1)])

  • 打印 九九乘法表
    [print("{}x{}={:>{}}{}".format(j, i, i*j, 1 if j == 1 else 2, "\n" if i==j else ‘ ‘), end="") for i in range(1, 10) for j in range(1, i+1)]

  • 打印ID, 要求左边4位是从1开始的整数,右边是10位随机小写英文字母,中间以点分隔; 打印前100个
    import string from random import choice [print(".".join(["{:0>4}".format(i), "".join(choice(string.ascii_lowercase) for _ in range(10))])) for i in range(100)]

列表解析式

标签:员工   整数   join   and   练习   rom   返回值   rand   实现   

原文地址:https://www.cnblogs.com/jingru-QAQ/p/11415372.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!