我有一个清单l
和一个函数f
。f
不是严格增加或减少。如何在列表中找到f(item)
最小的项目?例如,假设列表为:
l = [1, 2, 3, 4]
并且list(f(x)for x in l)
是:
[2, 9, 0, 3]
f(3)
小于其他任何一个的f,因此应打印“ 3”。最简单的方法是什么?我最初尝试:
min(f(x) for x in l)
但是,这0
不能3
。如果我是为了提高可读性而不是为了简洁起见,我会这样做:
index = 0
smallest = f(l[0])
for i in range(len(l)):
value = f(l[i])
if value < smallest:
smallest = value
index = i
很好,但是对于代码高尔夫球来说太可怕了。即使打了高尔夫球
i,s=0,f(l[0])
for x in range(len(l)):
v=f(l[x])
if v<s:s,i=v,x
这是一个不好的解决方案。我能想到的最短的解决方案是:
g=[f(x)for x in l];print(l[g.index(min(g))])
(44字节)如何进一步打高尔夫球?
@vaultah将其发布为答案。
—
NoOneIsHere16年
@ KevinLau-notKenny这是一个提示问题。那是话题。
—
NoOneIsHere
@trichoplax实际上我认为就是这样的:meta.codegolf.stackexchange.com/a/1724/31625
—
FryAmTheEggman
这是一个有趣的话题。也许使它通用,而不仅限于Python?看看如何使用不同的语言来做可能会很有趣
—
Luis Mendo
min(l,key=f)
。