2017-04-08 33 views
1

我有下面的Python 2代码,它解开了lambda里面的一个元组。这个lambda包含在for循环中。大多数pythonic的方式来移植这个元组解开Python 2中的lambda到Python 3

for lab, lab_pred, length in zip(labels, labels_pred, sequence_lengths): 
     accs += map(lambda (a, b): a == b, zip(lab, lab_pred)) 

什么是将其移植到Python 3的最佳方式是什么?

+0

除了缺乏在Python 3函数参数中解开元组,你有另一个问题:Python 3中的'map'返回一个迭代器而不是一个列表。许多函数返回Python 2中的列表就是这种情况。 –

回答

4

我认为最好的解决办法是不使用maplambda,使用列表理解来代替:

accs += [a == b for a, b in zip(lab, lab_pred)] 
+0

肯定!使用带有map或lambda的lambda有点愚蠢,因为这意味着你只是为了在lambda表达式中执行表达式而调用函数,而使用list comp(或gen exp)执行表达式直。 Python函数调用比C函数调用有更多的开销,所以当你不需要它们时避免它们是很好的。 –

2

如果你喜欢实用的风格有:

from operator import eq 
from itertools import starmap 

accs.extend(starmap(eq, zip(lab, lab_pred))) 
相关问题