现在已经很晚了,所以我不知道这会有多清楚。
我有一个函数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...
再次感谢您的帮助。
答案 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))])