列表解析式

Posted jingru-qaq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列表解析式相关的知识,希望对你有一定的参考价值。

列表解析式

标签(空格分隔): 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)]

以上是关于列表解析式的主要内容,如果未能解决你的问题,请参考以下文章

Python列表解析式

解析式

python 列表解析式

解析式表达式

Python 列表解析(列表生成式)

列表解析式