如何在f(item)最小的列表中找到该项目?


10

我有一个清单l和一个函数ff不是严格增加或减少。如何在列表中找到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字节)如何进一步打高尔夫球?


8
只是min(l,key=f)
Vault

2
@vaultah将其发布为答案。
NoOneIsHere16年

4
@ KevinLau-notKenny这是一个提示问题。那是话题。
NoOneIsHere

2
@trichoplax实际上我认为就是这样的:meta.codegolf.stackexchange.com/a/1724/31625
FryAmTheEggman

2
这是一个有趣的话题。也许使它通用,而不仅限于Python?看看如何使用不同的语言来做可能会很有趣
Luis Mendo

Answers:


10

的使用key属性min

正如@vaultah所说,请使用min(l,key=f)min(l,key=f)取最小的f(i)il

也可以将其应用于maxsorted。例如,max(l,key=f)为最大的f(i)il。对于sorted,用法为:sorted(l,key=f)


1
我现在接受这个,但是如果他发布了,将接受@vaultah的回答。
詹姆斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.