Python【每日一问】04
问:a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],求出列表a中所有奇数并构造新列表
答:
利用列表的元素下标遍历列表
- a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- # 创建一个空列表b
- b = []
- # 遍历列表的元素下标
- for i in range(0, len(a)):
- if a[i] % 2 == 1: # 判断是否是元素是否是奇数
- b.append(a[i]) # 使用 append()方法将符合条件的元素追加到列表b中
- print(b)
直接遍历列表
- a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- # 创建一个空列表b
- b = []
- # 变量列表中的元素
- for i in a:
- if i % 2 == 1: # 判断元素是否是奇数
- b.append(i) # 使用 append()方法追加元素到b列表中
- print(b)
列表推导式
- a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- b = [i for i in a if i % 2 == 1]
【知识拓展】:Python推导式
Python推导式是可以从一个数据序列构建另一个新的数据序列的结构体。 共有三种推导,在Python2和3中都有支持:
(1)列表(list)推导式
(2)字典(dict)推导式
(3)集合(set)推导式
1.语法格式
(1)列表(list)推导式:
- 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: 根据条件过滤哪些值可以。
简单点说就是:
- [表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
(2)字典(dict)推导式:
- 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: 根据条件过滤哪些值可以。
简单点说就是,
- {表达式 for 变量 in 字典} 或者 {表达式 for 变量 in 字典 if 条件}
(3)集合(set)推导式
- 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: 根据条件过滤哪些值可以。
简单点说就是,
- {表达式 for 变量 in 集合} 或者 {表达式 for 变量 in 集合 if 条件}
2.举例说明
(1)列表推导式
需求:a = [1, 2, 3, 4, 5, 6, 7, 8, 9],求出列表a中>5的数的平方并构造新列表
经典写法:
- a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
- b = []
- for i in a:
- if i > 5:
- pass
- b.append(i**2)
- print(b)
列表推导式写法:
- a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
- print([i**2 for i in a if i > 5])
(2)字典推导式
需求:spc = ['name', 'city', 'favorite color'],spc_value = ['kangkang', 'ShenZhen', 'blue']
将第一个列表 spc 中的元素作为键,第二个列表 spc_value 中的元素作为值生成新的字典
经典写法:
- spc = ['name', 'city', 'favorite color']
- spc_value = ['kangkang', 'ShenZhen', 'blue']
- new_dict = {}
- for i, j in zip(spc, spc_value):
- new_dict[i] = j
- print(new_dict)
字典推导式:
- spc = ['name', 'city', 'favorite color']
- spc_value = ['kangkang', 'ShenZhen', 'blue']
- new_dict = {}
- # zip()函数可以成对读取元素
- new_dict = {i: j for i, j in zip(spc, spc_value)}
- print(new_dict)
如果想让 代码更加强健,可以判断 spc 中是否包含 name,不包含就不执行
- spc = ['name', 'city', 'favorite color']
- spc_value = ['kangkang', 'ShenZhen', 'blue']
- new_dict = {}
- # zip()函数可以成对读取元素
- new_dict = {i: j for i, j in zip(spc, spc_value) if not i == "name"}
- print(new_dict)
(3)集合推导式
需求:x = [1, 5, 2, 3, 4, 6, 7, 1, 9, 0],求出列表x中<5的数的立方并构造集合
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典
经典写法:
- x = [1, 5, 2, 3, 4, 6, 7, 1, 9, 0]
- y = set()
- for i in x:
- if i < 4:
- y.add(i**3)
- print(y)
集合推导式:
- x = [1, 5, 2, 3, 4, 6, 7, 1, 9, 0]
- print({i**3 for i in x if i < 4})
Python【每日一问】04的更多相关文章
- Python每日一练(1):计算文件夹内各个文章中出现次数最多的单词
#coding:utf-8 import os,re path = 'test' files = os.listdir(path) def count_word(words): dic = {} ma ...
- python每日一函数 - divmod数字处理函数
python每日一函数 - divmod数字处理函数 divmod(a,b)函数 中文说明: divmod(a,b)方法返回的是a//b(除法取整)以及a对b的余数 返回结果类型为tuple 参数: ...
- Python全栈day 04
Python全栈day 04 一.解释器/编译器 补充:编译型语言和解释型语言? # 编译型:代码写完后,编译器将其变成成另外一个文件,然后交给计算机执行. c c++,c# ,java # 解释型: ...
- 每日一问:Android 消息机制,我有必要再讲一次!
坚持原创日更,短平快的 Android 进阶系列,敬请直接在微信公众号搜索:nanchen,直接关注并设为星标,精彩不容错过. 我 17 年的 面试系列,曾写过一篇名为:Android 面试(五):探 ...
- 每日一问:谈谈 volatile 关键字
这是 wanAndroid 每日一问中的一道题,下面我们来尝试解答一下. 讲讲并发专题 volatile,synchronize,CAS,happens before, lost wake up 为了 ...
- 每日一问:讲讲 Java 虚拟机的垃圾回收
昨天我们用比较精简的文字讲了 Java 虚拟机结构,没看过的可以直接从这里查看: 每日一问:你了解 Java 虚拟机结构么? 今天我们必须来看看 Java 虚拟机的垃圾回收算法是怎样的.不过在开始之前 ...
- 每日一问:你了解 Java 虚拟机结构么?
对于从事 C/C++ 程序员开发的小伙伴来说,在内存管理领域非常头疼,因为他们总是需要对每一个 new 操作去写配对的 delete/free 代码.而对于我们 Android 乃至 Java 程序员 ...
- 每日一问:LayoutParams 你知道多少?
前面的文章中着重讲解了 View 的测量流程.其中我提到了一句非常重要的话:View 的测量匡高是由父控件的 MeasureSpec 和 View 自身的 `LayoutParams 共同决定的.我们 ...
- 每日一问:简述 View 的绘制流程
Android 开发中经常需要用一些自定义 View 去满足产品和设计的脑洞,所以 View 的绘制流程至关重要.网上目前有非常多这方面的资料,但最好的方式还是直接跟着源码进行解读,每日一问系列一直追 ...
- python每日一练:0007题
第 0007 题: 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码.包括空行和注释,但是要分别列出来. # -*- coding:utf-8 -*- import os def count ...
随机推荐
- SSH服务器拒绝了密码
一般进行到这一步,可能是sshd的设置不允许root用户远程登录首先修改一下vim /etc/sshd/ssh_config 修改成如下图:然后reboot或者service sshd res ...
- 学习:MQTT协议及原理
1 MQTT协议实现方式: 实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish).代理(Broker)(服务器).订阅者(Subscribe) ...
- 第5天(半天)【shell编程初步、grep及正则表达式】
第5天(半天)[shell编程初步.grep及正则表达式] shell编程初步(01)_recv shell脚本:文本文件 #!:/bin/bash #!:/usr/bin/python #!:/us ...
- makefile中 = := += 的区别
= 是最基本的赋值 := 是覆盖之前的值 ?= 是如果没有被赋值过就赋予等号后面的值 += 是添加等号后面的值 1.“=” make会将整个makefile展开后,再决定变量的值.也就是说,变量的值将 ...
- Vue(七) 组件详解
组件 (Component) 是 Vue.js 最核心的功能,也是整个框架设计最精彩的部分,当然也是最难掌握的. 组件与复用 组件用法 组件与创建 Vue 实例类似,需要注册后才可以使用.注册有全局注 ...
- redis缓存工具类
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis ...
- 原生js手风琴效果
//js代码 //获取li var list = document.getElementsByTagName("li")[0]; //遍历 排他 for( var i=0;i&l ...
- JavaScript 中repalce的使用
把Paul Pauline pual Paula Paul中的Paul替换成Ringo <!DOCTYPE html> <html> <body> <butt ...
- elasticsearch 使用快照进行备份
Elasticsearch也提供了备份集群中索引数据的策略——snapshot API.它会备份整个集群的当前状态和数据,并保存到集群中各个节点共享的仓库中.这个备份的进程是增量备份的,在第一次备份的 ...
- 网络爬虫之网站图片爬取-python实现
版本1.5 本次简单添加了四路多线程(由于我电脑CPU是四核的),速度飙升.本想试试xPath,但发现反倒是多此一举,故暂不使用 #-*- coding:utf-8 -*- import re,url ...