美文网首页
解析表达式

解析表达式

作者: Vector_Wan | 来源:发表于2019-04-28 15:11 被阅读0次

解析表达式,可以简单高效的处理一个可迭代的对象,并生成结果列表。解析表达式不仅简洁,而且运行速度也比普通的循环快

一、列表推导式

列表推导式就是指 使用轻量级循环创建列表。
  • 一般方法创建列表:
list1 = []
for i in range(10):
    list1.append(i)
print(list1)
>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • 列表推导式
list3 = [i for i in range(2, 17, 2)]
list3
>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

对于有两个变量的循环也可使用列表推导式:
例如:
给定二维列表:
d = [[1, 2], [3, 4, 5], [6, 7, 8, 9]]
把它转换成一维的:
d = [1, 2, 3, 4, 5, 6, 7, 8, 9]

def fun1(d = []):
    a = []
    for i in range(len(d)):
        for j in range(len(d[i])):
            a.append(d[i][j])
    return a

它等价于:

def fun2(d = []):
    a = [d[i][j] for i in range(len(d)) for j in range(len(d[i]))]
    return a

推导式甚至可以更加灵活:

m= [[1,2,3],[4,5,6],[7,8,9]]
>>>[row[1] for row in m]
>>>[2,5,8] 
针对带有 ‘_’ 的 for 循环可以使用类似如下的列表推导式:
  • 一般方法
list1 = []
for _ in range(10):
   list1.append('不给我鲁班我就送')
print(list1)
>> ['不给我鲁班我就送', '不给我鲁班我就送', ...  '不给我鲁班我就送']
  • 列表推导式
list4 = ["不给我鲁班我就送" for _ in range(10)]
print(list4)
>> ['不给我鲁班我就送', '不给我鲁班我就送', ...  '不给我鲁班我就送']
循环的过程中使用 if :
  • 一般方法
from random import randint
l = [randint(-10,10) for _ in range(10)]  # 生成 10 个元素,范围在【-10,10】区间的列表
print('原列表:', l)
# 选出大于等于 0 的数据
res = []
for x in l:
    if x>= 0:
        res.append(x)
print("使用for循环筛选:", res)
>> 原列表: [-2, 9, -9, -1, 3, 2, -2, -5, -2, -7]
>> 使用for循环筛选: [9, 3, 2]
  • 列表推导式
res2 = [x for x in l if x >= 0]

print("使用列表推导式删选:", res2)
>> 使用列表推导式删选: [9, 3, 2]

二、字典解析

创建一个班级的分数:

from random import randint
grades = {'Student{}'.format(i):randint(50,100) for i in range(1, 21)}
print(grades)
>>  {'Student1': 97, 'Student2': 97, 'Student3': 100,  ..., 'Student20': 98}

筛选出高于 90 分的人:

d = {k:v for k, v in grades.items() if v >= 90}
print(len(d))
print(d)
>> 7
>> {'Student1': 97, 'Student2': 97, 'Student3': 100,  ...  'Student20': 98}

相关文章

  • Python练习 抓取AQI

    通过正则表达式解析数据 通过 BeautifulSoup 解析数据

  • 表达式求值(递归下降法)

    表达式求值,无论是逆波兰表达式方法,还是递归下降法,都是采取将表达式进行解析,使得解析之后的结果易于计算,逆波兰表...

  • Springboot解析spel表达式

    调用springboot解析spel表达式,可以通过表达式调用ioc容器中的bean或者解析自定义的参数 appl...

  • vue源码分析(2)

    记录之。。。 模板解析(1):大括号表达式解析 根据正则对象得到匹配出的表达式字符串:子匹配/RegExp.$1 ...

  • 2 python基础

    列表解析:[表达式 for …in… 条件]用于数据量较少 生成器表达式:(表达式 for …in… 条件 )用于...

  • 爬虫解析----BS4解析

    爬虫解析方法分为:正则解析、xpath解析、bs4解析。 正则表达式直接对html字符串进行解析(最快)。xpat...

  • 函数声明和函数表达式

    函数声明和函数表达式 函数声明: 函数表达式 区别:解析器在向执行环境中加载数据时,对函数声明和函数表达式的解析是...

  • $parse

    parse 类似与eval解析字符串,parse可以解析AngularJS表达式var expression = ...

  • 解析器模式

    定义 给定一个语言,定义它的语法的一种表达式,并且定义一个解析器,该解析器使用该表达式来解析语言中的句子; 文法 ...

  • llvm cookbook 2.5 简单表达式

    本文实现简单表达式的解析和构造。

网友评论

      本文标题:解析表达式

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