美文网首页
python 推导式

python 推导式

作者: eeert2 | 来源:发表于2020-03-16 14:55 被阅读0次

一、什么是推导式

对于list列表,set集合,dict字典,在原有数据上根据条件生成新的数据就是推导式。

它可以帮助我们把一个序列或者其它可迭代类型中的元素过滤加工,然后再新建一个列表集合字典
如:列表推导式,两侧用[]包围

num = [1,2,3,4,5]
double_num = [ n*2 for n in num ]
# double_num = [ 2,4,6,8,10 ]

二、为什么使用推导式

  1. 使用推导式具有更高的可读性并且更高效;

三、可读性高效

如果我们要在一份列表的基础上筛选生成新的列表,那么直接在迭代中增加 / 删除列表元素是不可取的,可能会造成问题。

num = [4, 8, 13, 9, 7, 10]
for index, value in enumerate(num):
    if value < 10:
        del num[index]

print(num) # [8, 13, 7, 10]

我们要对列表进行筛选,就需要提前准备一个空列表[]

new_num = []
num = [4, 8, 13, 9, 7, 10]
for index, value in enumerate(num):
    if value >= 10:
        new_num.append(value)

print(new_num)  # [13, 10]

这样下来对一个过滤功能我们就写了4行代码,使事情复杂了。
而使用列表推导式在一行中就可以完成

new_num = [ n for n in num if n >= 10 ]
  • 推导式的筛选条件放在最后

同样,使用字典推导式也是如此,只需要将两边的[]换成{}

例如我们收到一份请求信息,需要对数据进行初步验证,筛选

    query_params = {
        'name': '',
        'password': '',
        'user': 2,
        'address': '',
    }

    # 筛选有效的数据
    validated_query_params = {
        name: value
        for name, value in query_params.items()
        if value
    }

    # 返回给上一步的提交者
    detail_message = '必填项'
    errors_data = {
        name: detail_message
        for name, value in query_params.items()
        if not value
    }
    print(validated_query_params)  # {'user': 2}
    print(errors_data)  # {'name': '必填项', 'password': '必填项', 'address': '必填项'}

当然,我们也可以提前构造dict容器,然后再将数据填充到容器中,但是使用推导式可以获取更高的性能,且一目了然。

四、列表生成式

使用列表推导式可以生成一个新的列表,但对数据比较大的情况下,我们可以使用列表生成式,生成一个生成器,它仅仅是将两侧的[]改成()

# file 可能是一个很大的文件
# 我们也不能确定它到底有多少行

(line for line in file) 
init_list = range(100000000)
double_num = (n * 2 for n in init_list)
print(type(double_num))  # <class 'generator'>

print(next(double_num))  # 0
print(next(double_num))  # 2
print(next(double_num))  # 4

列表生成式函数式生成器生成的结果是一致的,但是列表生成式更简单明了。

以下是我们使用函数来实现

init_list = range(100000000)

def double_gene(init):
    for value in init:
        yield value * 2

double_num = double_gene(init_list)
print(type(double_num))  # <class 'generator'>

print(next(double_num))  # 0
print(next(double_num))  # 2
print(next(double_num))  # 4

相关文章

  • python推导式

    python的各种推导式(列表推导式、字典推导式、集合推导式) 推导式comprehensions(又称解析式),...

  • 024python的各种推导式

    python的各种推导式(列表推导式、字典推导式、集合推导式) 推导式comprehensions(又称解析式),...

  • Python中各种推导式

    Python的各种推导式(列表推导式,字典推导式,集合推导式) 列表(list)推导式 字典(dict)推导式 集...

  • 列表推导式

    列表推导式 推导式 推导式(又称解析器),是 Python 独有的一种特性。使用推导式可以快速生成列表、元组、字典...

  • Python 推导式

    Python v3.7.0 推导式(comprehensions),是Python的一种独有特性。推导式是可以从一...

  • Python高级用法-推导式

    Python高级用法-推导式 1.什么是推导式 Python推导式是从一个数据集合构建另外一个新的数据结构的语法结...

  • #抬抬小手学Python# 列表推导式与字典推导式

    列表推导式与字典推导式 在 Python 中推导式是一种非常 Pythonic 的知识,本篇博客将为你详细解答列表...

  • python代码简写(推导式 if else for in)

    python代码简写(推导式 if else for in) python中,(x for y in z for ...

  • Python——生成器、列表生成式、迭代器

    Python列表生成式 列表推导式的一般语法 这种语法等价于以下代码 下面举一些列表推导式的栗子: Python中...

  • Python 入门之推导式

    Python 入门之 推导式 推导式就是构建比较有规律的列表,生成器,字典等一种简便的方式 1、推导式 (1)列表...

网友评论

      本文标题:python 推导式

      本文链接:https://www.haomeiwen.com/subject/wnbgjhtx.html