用负数计算列表中的绝对最小值

时间:2018-10-24 14:43:15

标签: python

我有一个这样的列表-

list=[137,136,135,134,119,118,-14,-89,-208,-291,-491,-513,-596,-699]

现在,我想计算列表中的最小数字,而不考虑符号,但在最终答案中应保留符号。

例如,答案是-14。

现在,我首先将列表分为正数和负数,分别计算最小值和最大值,然后比较绝对值并返回答案。

4 个答案:

答案 0 :(得分:7)

您可以将min()函数与key参数一起使用:

>>> lst = [137,136,135,134,119,118,-14,-89,-208,-291,-491,-513,-596,-699]
>>> min(lst, key=abs)
-14

如果多个项目是“最小”项目(例如-1414),这将返回遇到的第一个项目。如果您需要处理领带盒,则可以使用元组作为键,例如:

>>> lst = [14,137,136,135,134,119,118,-14,-89,-208,-291,-491,-513,-596,-699]
>>> min(lst, key=lambda x: (abs(x), x))
-14

答案 1 :(得分:2)

要解决联系案件,请使用:

a = [137,136,135,134,119,118, 14, -14,-208,-291,-491,-513,-596,-699]
min(a, key=lambda x: (abs(x), x))
#-14

因为在这种情况下,纯abs会像以前一样返回14

答案 2 :(得分:1)

sorted(lst, key=lambda x: (abs(x), x))[0] # better solution would be to use min()

使用key参数可以指定应该如何排序。因此,在这种情况下,将根据绝对值对其进行排序。 例如

lst = [137,136,135,134,119,118, 14, -14,-208,-291,-491,-513,-596,-699]

然后将根据abs(x)对其进行排序,其中x将是列表中的每个元素,因此将返回14,然后返回-14,因为两者的绝对值均为{{ 1}},然后在元组中出现第二个参数来解决关系。因此,保持带符号的第二个参数会将-14上的-14视为14

答案 3 :(得分:-1)

我愿意

-min([abs(x) for x in lst if x < 0])