各种推导式详解

各种推导式详解

推导式的套路

之前我们已经学习了最简单的列表推导式和生成器表达式。但是除此之外,其实还有字典推导式、集合推导式等等。

下面是一个以列表推导式为例的推导式详细格式,同样适用于其他推导式。

variable = [out_exp_res for out_exp in input_list if out_exp == 2]
  out_exp_res:  列表生成元素表达式,可以是有返回值的函数。
  for out_exp in input_list:  迭代input_list将out_exp传入out_exp_res表达式中。
  if out_exp == 2:  根据条件过滤哪些值可以。

列表推导式

例一:30以内所有能被3整除的数

  print([ i  for i in range(30) if i%3==0])

multiples = [i for i in range(30) if i % 3 is 0]
print(multiples)
# Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

例二:30以内所有能被3整除的数的平方

print([i*i for i in range(30) if i%3==0])

def squared(x):
    return x*x
multiples = [squared(i) for i in range(30) if i % 3 is 0]
print(multiples)

例三:找到嵌套列表中名字含有两个‘e’的所有名字

names = [[‘Tom‘, ‘Billy‘, ‘Jefferson‘, ‘Andrew‘, ‘Wesley‘, ‘Steven‘, ‘Joe‘],
         [‘Alice‘, ‘Jill‘, ‘Ana‘, ‘Wendy‘, ‘Jennifer‘, ‘Sherry‘, ‘Eva‘]]

print([name for lst in names for name in lst if name.count(‘e‘) >= 2])  # 注意遍历顺序,这是实现的关键
 

字典推导式

例一:将一个字典的key和value对调

mcase = {‘a‘: 10, ‘b‘: 34}
mcase_frequency = {mcase[k]: k for k in mcase}
print(mcase_frequency)

例二:合并大小写对应的value值,将k统一成小写

mcase = {‘a‘: 10, ‘b‘: 34, ‘A‘: 7, ‘Z‘: 3}
mcase_frequency = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase.keys()}
print(mcase_frequency)

集合推导式

例:计算列表中每个值的平方,自带去重功能

squared = {x**2 for x in [1, -1, 2]}
print(squared)
# Output: set([1, 4])

练习题:

例1:  过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母

例2:  求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表

例3:  求M中3,6,9组成的列表M = [[1,2,3],[4,5,6],[7,8,9]]

时间: 2024-11-05 11:39:12

各种推导式详解的相关文章

python数据类型详解及列表字典集合推导式详解

一.运算符 Python语言支持以下类型的运算符: 算术运算符 如: #!/usr/bin/env python # -*- coding:utf-8 -*- a = 5 b = 6 print(a + b) 比较运算符 例: #!/usr/bin/env python # -*- coding:utf-8 -*- a = 5 b = 6 if a < b: print(True) else: print(False) 赋值运算符 例: #!/usr/bin/env python # -*- c

BP神经网络推导过程详解

BP算法是一种最有效的多层神经网络学习方法,其主要特点是信号前向传递,而误差后向传播,通过不断调节网络权重值,使得网络的最终输出与期望输出尽可能接近,以达到训练的目的. 一.多层神经网络结构及其描述 下图为一典型的多层神经网络. 通常一个多层神经网络由L层神经元组成,其中:第1层称为输入层,最后一层(第L层)被称为输出层,其它各层均被称为隐含层(第2层~第L-1层). 令输入向量为: \[ \vec x = [x_1 \quad x_2 \quad \ldots \quad x_i \quad

scala 隐式详解(implicit关键字)

掌握implicit的用法是阅读Spark源码的基础,也是学习Scala其它的开源框架的关键,implicit 可分为: 隐式参数 隐式转换类型 隐式调用函数 1.隐式参数 当我们在定义方法时,可以把最后一个参数列表标记为implicit,表示该组参数是隐式参数.一个方法只会有一个隐式参数列表,置于方法的最后一个参数列表.如果方法有多个隐式参数,只需一个implicit修饰即可. 当调用包含隐式参数的方法是,如果当前上下文中有合适的隐式值,则编译器会自动为改组参数填充合适的值.如果没有编译器会抛

武当三丰太极拳28式 第二式 退步崩式 详解版

http://www.daoisms.org/article/sort015/info-3965.html 动作:     图一                        图二 接上动作.由腰转带动左腿向后(东北),脚跟先着地,成左弓步:左手随身体由下朝上划弧崩起,掌心朝里,右掌由眼下经胸前向左腋下推出,横掌于丹田处,掌心向下定型时,手.脚.身.步一起到位.见(图一)(图二) 要点:    1.此拳步法灵活,仅从开始几动中可以看出步.腿的灵活度,同时要求步.身.手,齐到合一. 2.动作连贯性

Chapter 4 递归式详解

apache 工作模式prefork进程模式和worker线程模式参式详解和推荐设置

一apache工作模式: 1.prefork进程模式: prefork模式参数说明: prefork模式推荐设置: 二.apache worker模式: 1. 参数 三.prefork和worker模式比较: 1.prefork模式稳定.但要消耗更多的内存和资源.进程提供服务.查看:ps -ef|grep httd|wc -l 2.worker模式因为用子进程产生线程来处理请求,所以适合高并发高流量的HTTP服务.缺点,一个线程死了,父进程下的所有子线程都会挂了.稳定性不如prefork模式,但

js原型链继承的傻瓜式详解

本文争取用最简单的语言来讲解原型链继承的OOP原理 0.如果对原型继承还没有大致了解,完全一头雾水,请先阅读 <JavaScript高级程序设计>第六章最后部分的寄生组合式继承 或者_廖雪峰js教程里面面向对象部分的原型承部分https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/0014344997013405abfb7f0e1904a04ba6898a384b1e925000 1

伯努利分布详解(包含该分布数字特征的详细推导步骤)

Bernouli Distribution(中文翻译称伯努利分布) 该分布研究的是一种特殊的实验,这种实验只有两个结果要么成功要么失败,且每次实验是独立的并每次实验都有固定的成功概率p. 概率公式可以表示为  , x只能为0或者1,即要么成功要么失败 根据数学期望的性质 由于这里x只有两个取值所以该分布的数学期望为 方差则可以由方差公式来计算 方差公式:  该分布显然, 因此可以得到, 所以方差  最后我们来推导该分布的最大似然估计 是这样定义的,假设我们做了N次实验,得到的结果集合为 ,我们想

Scala 深入浅出实战经典 第60讲:Scala中隐式参数实战详解以及在Spark中的应用源码解析

王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 腾讯微云:http://url.cn/TnGbdC 360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2土豆:http://www.tudou.com/programs/view/IVN4EuFlmKk/优酷:http://v.youku.com/v_show/id_