Rai*_*ish 2 python arrays for-loop python-3.x
我是python的新手,我正在学习lambda和map,但是当我尝试一些东西时,我发现一个循环没有执行,我想知道原因.
我知道这样做是没用的,但是当我迭代同一个列表两次时,第二次没有被执行.
salarios = map(lambda emp: emp.salario, empleados)
print("------SALARIO-------")
for salario in salarios:
print(salario)
print("-----SALARIO2--------")
for salario in salarios:
print(salario)
Run Code Online (Sandbox Code Playgroud)
我明白了
------SALARIO------- 6700 7500 2100 2150 1800 -----SALARIO2--------
我希望得到
------SALARIO------- 6700 7500 2100 2150 1800 -----SALARIO2-------- 6700 7500 2100 2150 1800
它为什么会发生?这是一些lenguaje优化?
是的,map是一个生成器(从Python 3开始).一旦在第一个循环中消耗,它第二次"空".
没有map+ lambda组合你会更好(这是一般规则).在您的情况下,更改:
salarios = map(lambda emp: emp.salario, empleados)
Run Code Online (Sandbox Code Playgroud)
通过
salarios = [emp.salario for emp in empleados]
Run Code Online (Sandbox Code Playgroud)
现在你有一个列表理解,你可以根据需要迭代多次.
(您当前的表达式相当于生成器理解salarios = (emp.salario for emp in empleados),当您只想在其上迭代一次时更容易阅读)
注意:在Python 2中map返回一个list,所以人们滥用map和lambda表达式,有时甚至没有迭代,只是为了调用列表元素上的函数.
使用Python 2,您的代码可以工作,但在切换到Python 3时会产生恶意的可移植性错误(该工具提出修复的list(map(lambda emp: emp.salario, empleados))表达式2to3,但速度较慢,甚至比理解更难阅读)
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |