x = (1,1,-13,8,5,0,4,-1,-4)
z = map(lambda x: min(x) >=0 , x)
为什么当我尝试print(z)
我没有得到1?
答案 0 :(得分:3)
您的代码无效,因为lambda x
会获取原始元组的各个项目,并且您将它们传递给min
。这就是它失败的原因。您可以像这样修复您的程序
print min(filter(lambda i: i >= 0, x))
# 1
我们正在使用生成器表达式执行相同的操作,例如
x = (1, 1, -13, 8, 5, 0, 4, -1, -4)
print min(item for item in x if item > 0)
# 1
如果您将0
也视为正数,则
print min(item for item in x if item >= 0)
# 0
注意:如果没有任何元素为正数或x
为空,则会抛出错误。
答案 1 :(得分:1)
为什么我尝试
print(z)
时我没有1
?
如果您有以下代码:
z = map(lambda x: min(x) >=0 , x) # <-- exception
# ^^^^^
print(z)
然后我怀疑控制是否达到了打印声明。你必须在我在上面提到的代码中作为注释获得异常。在我的机器上查看它的执行情况:
>>> x = (1, 1, -13, 8, 5, 0, 4, -1, -4)
>>> z = map(lambda x: min(x) >= 0, x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda> # <--- First
TypeError: 'int' object is not iterable # <--- Second
请注意错误消息。我标记了第一个&#39;,异常消息说您在lambda表达式中遇到异常。 &#39;其次&#39;我标记的行意味着异常是TypeError!
为什么键入错误?
因为您在lambda表达式中向min( )
函数传递了错误的参数。检查Python documentation for min()
。函数min( )
可以通过以下两种方式调用:
>>> min(1, 2) # First: Multiple arguments
1
>>> min([-1, 2, 3]) # Second: pass an iterator
-1
>>> min([3]) # Infact you can pass iterator of single element, that will work
3
但你怎么称呼如下:
>>> min(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable # <---
>>>
现在再次注意异常消息,它与我们在&#34; TypeError&#34;上方的代码段中遇到的相同。
在map( )
函数中,lambda表达式中的参数x
是本地的,恰好是int
类型(x
的第二个参数map( )
是整合的集合)。您还应该仔细阅读文档中的map(function, iterable, ...)
函数。在你的代码中,iterable是元组x
,函数是你的lambda表达式。在第一步,使用x[0]
1
调用lambda函数,这样就可以在lambda表达式中有效调用min(1)
并导致TypeError异常。