您的位置:首页 > 其它

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()

}

注意,我们不是随便换行的:在写列表推导的时候我们复制粘贴了很多条语句,我们是在这些语句之间换行的。在用各种颜色标注的版本中,我们是在颜色发生变化时换行的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: