暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python 列表递推式详解

山人彤 2020-10-19
726

推导式comprehensions(又称解析式),是Python的一种独有特性,可以从一个数据序列构建另一个新的数据序列。具有使用方便,让代码看起来很高级的功能。

分析

考虑以下需求:

a=[1,2,3,'a','b','c']

要取出列表中的数字,然后平方,得到一个新的列表。

一般可以这样解决:

a=[1,2,3,'a','b','c']
b=[]
for i in a:
    # isinstance(a,type) 判断a的类型是不是type
    if(isinstance(i,int)):
        b.append(i**2)
print(b)

如果使用列表推导式,会简洁很多:

a=[1,2,3,'a','b','c']
b=[i**2 for i in a if isinstance(i,int)]
print(b)

列表表达式由四个部分组成:

  • 输入的列表
  • 列表循环变量
  • 可选的约束条件
  • 输出表达式

例子

  • 计算x的平方

    #0-9
    x = list(range(10))
    print(x)
    y = [i**2 for i in x]
    print(y)

  • 实现嵌套列表的平铺

    vec = [[1,2,3],[4,5,6],[7,8,9]]
    print(vec)
    y = [j for i in vec for j in i]
    print(y)

  • 过滤不符合条件的元素

    a = [1,2,3,0,-1,-3,-100,100]
    print(a)
    b = [i for i in a if i > 0]
    print(b)

  • 多序列任意组合

    a = [1,2,3,4,5,6,7]
    b = [1,2,3,4,7,7,7]
    c = [(x,y) for x in a for y in b if(x==y)]
    d = [(a[x],b[y]) for x in range(7for y in range(7if a[x]==b[y]and(x==y)]
    print(c)
    print(d)

  • 矩阵按列读取

    a = [[1,2,3],[4,5,6],[7,8,9]]
    b = [[row[i] for row in a] for i in range(3)]
    print(b)

  • 生成100以内的素数

    import numpy as np
    a = [x for x in range(2,101if 0 not in [x%i for i in range(2,int(np.sqrt(x)))] ]
    print(a)


文章转载自山人彤,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论