1.enumerate

enumerate函数用于遍历序列中的元素以及它们的下标,这样你就可以通过index 直接定位你的数据了。

之前对list操作的时候,即想取到下表,又想取到对应值,我是这么来实现的。

 list=['a','b','c']
for ind in range(len(list)):
print ind,list[ind] #运行结果是:
>>>
0 a
1 b
2 c
>>>

但是你有了enumerate之后就瞬间感觉高大上了,因为你一步到位了。

 list=['a','b','c']
for ind ,value in enumerate(list):
print ind,value
#运行结果为:
0 a
1 b
2 c
>>>

enumerate 函数用于遍历序列中的元素以及它们的下标:

遍历元祖:

 for i,j in enumerate(('a','b','c')):
print i,j
#运行结果:
0 a
1 b
2 c

遍历列表:

 for i,j in enumerate([1,2,3]):
print i,j
#运行结果
0 1
1 2
2 3

遍历字典:

 for i,j in enumerate({'a':1,'b':2}):
print i,j
#运行结果
0 a
1 b

遍历字符串:

 for i,j in enumerate('abc'):
print i,j
#运行结果:
0 a
1 b
2 c

2.从for循环到列表推导式

每个列表推导都可以重写成for循环的形式,但并不是每一个for循环都可以重写成列表推导。要理解什么时候该使用列表推导,关键在于不断练习辨别哪些问题看起来像是列表推导。

如果你能把你的代码重写成这个样子的for循环,那你就能把它重写成列表推导:

普通for循环操作:

 numbers=[1,2,3,4,5]

 doubled_numbers=[] for n in numbers:
doubled_numbers.append(n*2)
print doubled_number

列表推导式:

 numbers=[1,2,3,4,5]

 doubled_numbers1=[]

 doubled_numbers1=[n*2 for n in numbers]

 print '****=',doubled_numbers1

操作步骤:

  1. 复制给新列表赋值的语句(第三行) doubled_numbers=[]

  2. 把我们append到新列表的表达式复制过来(第五行)doubled_numbers=[n*2]

  3. 复制for循环的那一行:(第四行)doubled_numbers=[n*2 for n in numbers]

下面我们在来一个多一个条件判断的:

 numbers = [1, 2, 3, 4, 5]

 doubled_odds = []
doubled_odds1 = []
for n in numbers:
if n % 2 == 1:
doubled_odds.append(n * 2) print 'doubled_odds=',doubled_odds

列表推导式:

 numbers = [1, 2, 3, 4, 5]

 doubled_odds1 = []

 doubled_odds1 = [n*2 for n in numbers if n % 2 ==1]

 print 'doubled_odds=', doubled_odds1

操作步骤:

  1. 复制给新列表赋值的语句(第四行) doubled_numbers1=[]

  2. 把我们append到新列表的表达式复制过来(第七行)doubled_numbers1=[n*2]

  3. 复制for循环的那一行:(第五行)doubled_numbers1=[n*2 for n in numbers]

  4. 复制if语句,除去末尾的:(第六行)doubled_numbers1=[n*2 for n in numbers if n % 2 ==1]

嵌套循环:

 matrix=[[1,2],[3,4],[5,6]]
flattened = []
flattened1 = []
for row in matrix:
for n in row:
flattened.append(n)
print 'flattened=',flattened

列表推导式:

 flattened1=[n for row in matrix for n in row]
print 'flattened1=',flattened1

注意:不要把这个列表推导写成这个样子:

flattened 1= [n for n in row for row in matrix]

这里把两个循环颠倒了,上面的那个才是正确的。

在处理列表推导里的嵌套for循环时,要记住:for语句的顺序和原来的循环中for语句的顺序是一样的。

字典推导

普通推导:

 #key 和value调换位置
dic = {'a':1, 'b':2, 'c':3, 'd':4}
dic_list = {}
dic_list1 = {}
for key, value in dic.items():
dic_list[value] = key print 'dic_list=', dic_list

字典推导:

 dic_list1 = { value: key for key, value in dic.items()}
print 'dic_list1=', dic_list1

换行后逻辑语句还原,这样写是不对的

flipped = {

value: key

for key, value in original.items()

}

注意,我们不是随便换行的:在写列表推导的时候我们复制粘贴了很多条语句,我们是在这些语句之间换行的。在用各种颜色标注的版本中,我们是在颜色发生变化时换行的。

enumerate小技巧和列表推导式的更多相关文章

  1. python小知识,列表推导式

    使用列表推导式可以快速生成一个列表,或者根据某个列表生成满足指定需求的列表. 1.生成指定范围的数值列表,语法格式如下: list=[Expression for var in range if co ...

  2. Python小代码_6_列表推导式求 100 以内的所有素数

    import math a = [p for p in range(2, 100) if 0 not in [p % d for d in range(2, int(math.sqrt(p)) + 1 ...

  3. python--利用列表推导式快速生成xml格式数据

    在接口自动化测试中,我们经常将要发送的数据放到excel里. json数据放至excel方便,但最近的一个测试,数据是xml格式发送的 如下: 属性 必选/可选 描述 1. Message Eleme ...

  4. day13列表推导式作业详解

    1.day13题目 2,用列表推导式做下列小题 (1)过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母 (2)求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表 (3)求M ...

  5. Python之路-条件控制&循环语句&列表推导式&常用函数

    一.什么是条件控制语句 条件控制语句,也可以称之为判断语句,通过一条或多条的执行结果来决定接下来要执行的代码块. 二.if语句 if语句是用来进行判断的,最简答的if语句只有一个判断一个操作. 语法: ...

  6. Python的高级特性2:列表推导式,生成器与迭代器

    一.列表推导式 1.列表推导式是颇具python风格的一种写法.这种写法除了高效,也更简短. In [23]: {i:el for i,el in enumerate(["one" ...

  7. python列表推导式详解

    推导式是Python中很强大的.很受欢迎的特性,具有语言简洁,简化代码,速度快等优点.推导式包括:1.列表推导式2.字典推导式3.集合推导式4.嵌套列表推导式注意: 字典和集合推导是最近才加入到Pyt ...

  8. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

  9. python之生成器和列表推导式

    一.生成器函数 1.生成器 就是自己用python代码写的迭代器,生成器的本质就是迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现). 2.构建生成器的两种方式 1,生成 ...

随机推荐

  1. codevs 1913 数字梯形问题 费用流

    题目链接 给你一个数字梯形, 最上面一层m个数字, 然后m+1,......m+n-1个. n是层数. 在每个位置, 可以向左下或右下走.然后让你从最顶端的m个数字开始, 走出m条路径, 使得路过的数 ...

  2. 通宵疯狂积累VB.NET基础知识

    VB.NET中Module的概念 为什么VB.NET中会有一个Module的东西,而在C#等语言中是没有的 首先,这是一个历史原因.早先的VB语言都有模块和类模块的概念.所谓模块一般就是存放公用的一些 ...

  3. Afinal开源框架中FinalActivity的使用

    1. 首先将afinal.jar文件复制到项目中的libs文件夹下 2. 让MainActivity不在继承系统的Activity,而是继承FinalActivity public class Mai ...

  4. UIViewController、UINavigationController与UITabBarController的整合使用

    UINavigationController与UITabBarController是iOS开发中最常用的两种视图控制器,它们都属于UIViewController的子类,继承关系如下: @interf ...

  5. csharp中DateTime总结

    Table of Contents 1 时间格式输出 2 求某天是星期几 3 字符串转换为DateTime 3.1 String->DateTime 的弹性做法 4 计算2个日期之间的天数差 5 ...

  6. 解析word中的表格

    由于word表格的特殊性,其本身中的数据本来就不够完善,不能够很好的知道其具体的合并.跨行的相关属性,表格的单位可能是PT或者是百分比,并且是共存的,为处理带来了一定的负担,本代码实现了一个将Word ...

  7. $(this) 和 this

    在使用 jQuery 时,$(this) 和 this 具体指: this :是当前 DOM 对象: $(this) 是jQuery对象: 例子: <input type="text& ...

  8. 使用optimizely做A/B测试

    摘要: optimizaly是一个提供A/B测试服务的网站,可以可视化地在线编辑测试内容和目标,简单方便.   1. A/B测试简介 所谓 A/B 测试,简单来说,就是为同一个目标制定两个方案(比如两 ...

  9. JVM结构、GC工作机制详解(转)

    原文地址:http://blog.csdn.NET/tonytfjing/article/details/44278233 JVM结构.内存分配.垃圾回收算法.垃圾收集器.下面我们一一来看. 一.JV ...

  10. C++_nullptr

    C++_nullptr null 0 nullptr 的区别