enumerate小技巧和列表推导式
2016-04-12 14:42
169 查看
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
操作步骤:
复制给新列表赋值的语句(第三行) doubled_numbers=[]
把我们append到新列表的表达式复制过来(第五行)doubled_numbers=[n*2]
复制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
操作步骤:
复制给新列表赋值的语句(第四行) doubled_numbers1=[]
把我们append到新列表的表达式复制过来(第七行)doubled_numbers1=[n*2]
复制for循环的那一行:(第五行)doubled_numbers1=[n*2 for n in numbers]
复制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()
}
注意,我们不是随便换行的:在写列表推导的时候我们复制粘贴了很多条语句,我们是在这些语句之间换行的。在用各种颜色标注的版本中,我们是在颜色发生变化时换行的。
相关文章推荐
- 再谈PHP单引号和双引号区别
- javascript的全局函数
- library not found for -lAFNetworking
- jmeter学习笔记(Threads)
- Android Uevent 分析,从kernel到framework
- 指针简介
- leetcode 32. Longest Valid Parentheses
- C/C++编程规范
- TC问题
- BC404学习笔记-ABAP面向对象编程(二)-继承中的构造函数
- iOS 捕获程序崩溃日志
- Python小程序
- MySQL5.7.10 初始化失败error(mysqld --initialize / mysql_install_db) 没有创建系统数据库(prematurely with errno= 32)
- centos install ruby
- 嵌入式 Linux线程同步读写锁rwlock示例
- jquery学习之事件委派
- sysfs接口整理
- 团队作业(二)
- 告别手写 API文档生成工具推荐
- mongo数据多进程导入mysql数据库(YII2实现)