我只是测试了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
我可能失去了一些东西很明显,是什么呢?谢谢。
我只是测试了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
我可能失去了一些东西很明显,是什么呢?谢谢。
它应该是:
test = map(lambda x:x*3, numbers)
的事情是,地图需要两个参数 - 要被映射的功能,并且可迭代,该功能将被映射过来。在这种情况下,你的lambda是你的函数,而numbers
是你的迭代器。需要注意的是在Python中,你通常做[x*3 for x in numbers]
列表或(x*3 for x in numbers)
的发电机(懒惰EVAL)
你混合这样做的两种不同的方式:
使用列表理解
[x*3 for x in range(3)]
使用地图和lambda表达式
map(lambda x:x*3, range(3))
请不要使用带有'地图lambda表达式()' - 而不是使用列表内涵!它更具可读性,避免了函数调用开销 – ThiefMaster
K我会牢记这一点。我实际上在另一个问题中看到lambda被用于这种方式,询问是否使用list comps或map()。这导致我到这个困境:) – Amon