Python For循环没有执行两次
我是python新手,我正在学习lambda和map,但是当我尝试一些事情时,我发现一个循环没有执行,我想知道为什么 我知道这样做是没有用的,但是当我迭代同一个列表两次时,第二次就不会执行了Python For循环没有执行两次,python,arrays,python-3.x,for-loop,Python,Arrays,Python 3.x,For Loop,我是python新手,我正在学习lambda和map,但是当我尝试一些事情时,我发现一个循环没有执行,我想知道为什么 我知道这样做是没有用的,但是当我迭代同一个列表两次时,第二次就不会执行了 salarios = map(lambda emp: emp.salario, empleados) print("------SALARIO-------") for salario in salarios: print(salario) print("-----SALARIO2--------"
salarios = map(lambda emp: emp.salario, empleados)
print("------SALARIO-------")
for salario in salarios:
print(salario)
print("-----SALARIO2--------")
for salario in salarios:
print(salario)
我明白了
------萨拉里奥-------
6700
7500
2100
2150
1800
-----萨拉里奥2--------
我希望得到
------SALARIO-------
6700
7500
2100
2150
1800
-----SALARIO2--------
6700
7500
2100
2150
1800
------萨拉里奥-------
6700
7500
2100
2150
1800
-----萨拉里奥2--------
6700
7500
2100
2150
1800
为什么会这样?这是一些lenguaje优化?是的,
map
是一个生成器(从Python 3开始)。一旦在第一个循环中被消耗,第二次它就“空”了
如果没有map
+lambda
组合(这是一条一般规则),您会过得更好。在您的情况下,更改:
salarios = map(lambda emp: emp.salario, empleados)
借
现在您有了一个列表理解,您可以根据需要多次迭代
(当前表达式相当于generator comprehensionsalarios=(emp.salario表示Emplicatos中的emp)
,当您只想在其上迭代一次时,它更易于阅读)
注意:在Python2中,map返回一个列表
,因此人们滥用map
和lambda
表达式,有时甚至没有迭代,只是为了调用列表元素上的函数
使用Python2,您的代码本来可以工作,但在切换到Python3时会有一个恶性的可移植性错误(map(lambda emp:emp.salario,empleados))表达式,该表达式是
2to3
工具提出的修复方法,但速度较慢,甚至比理解更难)yupmap
只运行一次。。。重复阅读关于生成器您可以将多次迭代的map()结果保存在列表中,这可能有助于显示此处发生的情况:salarios=list(map(lambda emp:emp.salario,empleados))
。在Python2中,映射自动返回列表。@DanFarrell我正要这么说!是的,执行list(map(…)
,它是有效的。这个问题可能是由于在python 2中使用map
来执行从循环到洗碗等所有操作的坏习惯造成的。我过去也经常这样做一小段时间,只是为了炫耀map
和lambda
(如果我能在同一个表达式中使用reduce
,那就更好了)
salarios = map(lambda emp: emp.salario, empleados)
salarios = [emp.salario for emp in empleados]