2013-10-13 39 views
1

我只是测试了map()函数来了解它,并且遇到了一个问题。我只是想通过三到乘在0和2之间numbers所有的数字:我可以在map()函数中使用range()吗?

numbers = [1,2,3,4] 

test = map(lambda x: x * 3 for x in range(3), numbers) 

print test 

我可能失去了一些东西很明显,是什么呢?谢谢。

+0

请不要使用带有'地图lambda表达式()' - 而不是使用列表内涵!它更具可读性,避免了函数调用开销 – ThiefMaster

+0

K我会牢记这一点。我实际上在另一个问题中看到lambda被用于这种方式,询问是否使用list comps或map()。这导致我到这个困境:) – Amon

回答

3

map()确实修真你 - 无需添加其他(其实你不能,因为你”已经见过)。

正确的语法是:

map(lambda x: x * 3, numbers) 

即相当于:

[x * 3 for x in numbers] 
+0

谢谢,但我怎么会使用'range()'函数来只乘以某些数字3? – Amon

+0

@Amon这不是范围()函数的用途 – TerryA

+0

@Amon哦,我想你想检查数字是否在*范围(3)中*。如果x在范围(3)中,你可以执行'[x * 3 for x]' – TerryA

1

它应该是:

test = map(lambda x:x*3, numbers) 

的事情是,地图需要两个参数 - 要被映射的功能,并且可迭代,该功能将被映射过来。在这种情况下,你的lambda是你的函数,而numbers是你的迭代器。需要注意的是在Python中,你通常做[x*3 for x in numbers]列表或(x*3 for x in numbers)的发电机(懒惰EVAL)

1

你混合这样做的两种不同的方式:

使用列表理解

[x*3 for x in range(3)] 

使用地图和lambda表达式

map(lambda x:x*3, range(3)) 
相关问题