函数在python中达到其最小负值的返回值

时间:2013-09-03 04:57:25

标签: python

现在已经很晚了,所以我不知道这会有多清楚。

我有一个函数f(x),我想从列表中得到x的值,其中f(x)最大的最小负值,即:

x = [0, 2, 4, 6]
f(x) = [200, 0, -3, -1000]

在这种情况下,我想要在x中返回值4,这给了我-3。我不想要绝对最小值(-1000),而是绝对值最低的负值。

我希望这是有道理的,非常感谢你的帮助。

更新

我试图简化问题,也许太多了。事情就是这样:我有一个形成多边形的2D点列表,我想顺时针订购它们。

为此,我在每个点和其余点之间选取交叉积,并根据从前一个得到负交叉积(它告诉我旋转方向)选择下一个点,并且具有最小的绝对值(告诉我这真的是下一点。)

所以,说:

x = [(1,1), (-1,-1), (-1,1), (1,-1)]

我想得到

x = [(1,1), (1,-1), (-1,-1), (-1,1)]

我在做

for point in x:
   cp = [numpy.cross(point, p) for p in x]
   # and then some magic to select the right point...

再次感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

a = [0, 2, 4, 6]
b = [200, 0, -3, -1000]

value = max([x for x in b if x < 0])
print a[b.index(value)]

答案 1 :(得分:1)

试试这个:

inputs = [0, 2, 4, 6]
outputs = [200, 0, -3, -1000]
max = min(outputs)
for n in outputs:
    if n >= 0:
        continue
    if n > max:
        max = n
print inputs[outputs.index(max)]

答案 2 :(得分:0)

以下解决方案在大多数情况下都可以正常运行

    [ z for z in x if f(z) == max( f(y) for y in x if f(y) < 0 ) ]

这个解决方案的一个特点是,如果有重复,即几个x产生相同的最大负数,则所有这些都将被返回。

答案 3 :(得分:0)

x = [0, 2, 4, 6]
fx = [200, 0, -3, -1000]

print(x[fx.index(max(n for n in fx if n < 0))])