Python 从标准输入中获取数字列表,并显示最接近0的数字

Python 从标准输入中获取数字列表,并显示最接近0的数字,python,Python,我是Python的初学者,我尝试从stdin获取一个数字列表,然后显示最接近0的数字 以下是我到目前为止所做的 import sys list = sys.stdin.readline().split() print(min(list, abs)) 但我用这段代码得到的结果是 <built-in function abs> 您能帮我吗?python 2.x: lis = raw_input("enter str").split() Python3.x: lis = inpu

我是Python的初学者,我尝试从stdin获取一个数字列表,然后显示最接近0的数字

以下是我到目前为止所做的

import sys
list = sys.stdin.readline().split()
print(min(list, abs))
但我用这段代码得到的结果是

<built-in function abs>

您能帮我吗?

python 2.x:

lis = raw_input("enter str").split()
Python3.x:

lis = input("enter str").split()
并将
打印(最小值(列表,abs))
修改为:

print (abs(int(min(lis, key = lambda x: abs(int(x))))))
最短的是:

print (abs(int(min(input("enter str").split(), key = lambda x: abs(int(x))))))
Python2.x:

lis = raw_input("enter str").split()
Python3.x:

lis = input("enter str").split()
并将
打印(最小值(列表,abs))
修改为:

print (abs(int(min(lis, key = lambda x: abs(int(x))))))
最短的是:

print (abs(int(min(input("enter str").split(), key = lambda x: abs(int(x))))))

-参数仅为关键字,因此您需要像这样传入它:

min(lst, key=abs)
否则,它会尝试检查将列表与函数进行比较的
lst
,是否会导致“意外”结果(函数较小!)

但是,您还需要将项目转换为整数(或s?)(否则,
abs
将应用于字符串),例如:


您提到您只对最小的正数感兴趣,在这种情况下,您可以使用:

lst = map(int, sys.stdin.readline().split())  # identical
positives = filter(lambda x: x >= 0, lst)     # remove numbers below 0
min(positives)
或全部在一行中:

min(int(item) for item in sys.stdin.readline().split() if int(item) >= 0)

-参数仅为关键字,因此您需要像这样传入它:

min(lst, key=abs)
否则,它会尝试检查将列表与函数进行比较的
lst
,是否会导致“意外”结果(函数较小!)

但是,您还需要将项目转换为整数(或s?)(否则,
abs
将应用于字符串),例如:


您提到您只对最小的正数感兴趣,在这种情况下,您可以使用:

lst = map(int, sys.stdin.readline().split())  # identical
positives = filter(lambda x: x >= 0, lst)     # remove numbers below 0
min(positives)
或全部在一行中:

min(int(item) for item in sys.stdin.readline().split() if int(item) >= 0)

python中没有名为
list
的变量,以免与“type”列表混淆。您正在将
list
与函数(
abs
)进行比较。在Python3(
TypeError
)中不能这样做,但在Python2中可以进行这样的比较,在这种情况下,函数被认为更小。在Python中不要将变量命名为
list
,这样它就不会与“type”列表混淆。您将
list
与函数(
abs
)进行比较。在Python3(
TypeError
)中不能这样做,但在Python2中可以进行这样的比较,在本例中,函数被认为更小。谢谢,这是我在寻找的,只是我需要打印最接近0的正数。例如,如果我有以下列表:[42,-4,-4,7],我必须打印4,而不是-4@omri_saadon我认为最后一个例子是错误的。
lambda x:)
看起来更像是一个
SyntaxError
(或一个笑脸)。@MSeifert感谢您的注意。修正了:)谢谢,这是我要找的,只是我需要打印最接近0的正数。例如,如果我有以下列表:[42,-4,-4,7],我必须打印4,而不是-4@omri_saadon我认为最后一个例子是错误的。
lambda x:)
看起来更像是一个
SyntaxError
(或一个笑脸)。@MSeifert感谢您的注意。修正了:)谢谢你的回答,我现在明白为什么我的代码不起作用了。@chrisplolls我刚才看到你对最小的正数感兴趣,所以我添加了一种同样有效的方法。:)这并不是我必须要做的;)也许我没有解释清楚。我必须打印最接近零的数字。但是如果有两个匹配,比如-4和4,我必须选择积极的一个!我已经解决了我的问题,但如果你有另一个解决方案,我会去学习的。知道解决问题的多重方法总是一件好事。谢谢你的回答,我现在明白为什么我的代码不起作用了。@chrisplolls我刚才看到你对最小正数感兴趣,所以我添加了一种同样有效的方法。:)这并不是我必须要做的;)也许我没有解释清楚。我必须打印最接近零的数字。但是如果有两个匹配,比如-4和4,我必须选择积极的一个!我已经解决了我的问题,但如果你有另一个解决方案,我会去学习的。了解解决问题的多种方法总是一件好事。