リスト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回答として投稿してください。
—
NoOneIsHere
@ KevinLau-notKennyこれはヒントの質問です。それは話題です。
—
NoOneIsHere
@trichoplax実際にはこれだと思います:meta.codegolf.stackexchange.com/a/1724/31625
—
FryAmTheEggman
これは興味深いトピックです。多分それをPythonに限らず一般的にしますか?それをさまざまな言語で行う方法を見るのは興味深いかもしれません
—
Luis Mendo '17
min(l,key=f)
。