web-dev-qa-db-ja.com

短いPython「低い値を選択してください」と言うコード?

私が言いたいのは、私はより低い値を返す本当に短いコードを探しているということです。例えば:

a=[1,2,3,4,5,6,7,8,9,10]
b=[1,2,3,4,5,6,7,8]
len(a) = 10
len(b) = 8
if (fill-this-in):
     print(lesser-value)

また、bがaよりも小さい場合は、変数bをlen(b)ではなくbで返したいことを追加するのを忘れました。

23
Devoted
 print(min(a、b))
41
cschol

あなたはあなたが何を望んでいるのかについてあまり明確ではないので、いくつかの選択肢があります。次の2つのリストがあるとします。

_a = [1,2,3,4,5,6,7,8,9,10]
b = [1,2,3,4,5,6,7,8]
_

最短のリストを印刷するには、次のようにします。

_>>> print(min(a, b))
[1, 2, 3, 4, 5, 6, 7, 8]
_

最短の長さを数値として取得するには、各リストのminlen()を実行するか、len(min())を実行します(どちらも同じです。最も多いものを選択してください)読み取り可能)。

_>>> print(min( len(a), len(b) ))
# or..
>>> print(len( min(a, b) ))
8
_

いずれかのリストの最小値を出力するには、リストをmin()への単一の引数として指定できます。

_>>> a.extend(b) # Appends b to a
>>> print a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8]
>>> print(min(a))
1
_

最後に、別の可能性として、合計で最も低い値を持つリスト:

_>>> max( sum(a), sum(b) )
55
_

sum()が最も高い実際のリストを出力するには、..のような三項演算子を使用できます。

_>>> print a if sum(a) > sum(b) else b
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
_

..私はそれを本当に好き(または使用)したことはありませんが、代わりに少し長く、通常のif/elseステートメントを使用します。

_>>> if sum(a) > sum(b):
...     print a
... else:
...     print b
... 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
_
29
dbr

リストの長さが(値ではなく)リストを低くするものである場合、実際には次のことが必要です。

min(a, b, key=len)

ちなみにこれは同等です

min(a, b)

与えられた例では。

5
A. Coady

min()は必要なことを達成する必要があります

print(min(a,b))
4
vili

この回答は現在古くなっているようです。同じ質問をしてこの答えを見つけましたが、期待した結果が得られませんでした。 Minは2つのリストのうち短い方を自動的に返さないことが判明しました(2.7)。これを取得するには、「key」引数(2.5で導入)を使用する必要があります(強調が追加されました)。

min(iterable [、key])min(arg1、arg2、* args [、key])iterableの最小項目、または2つ以上の引数の最小項目を返します。

位置引数が1つ指定されている場合、iterableは空でないiterable(空でない文字列、タプル、リストなど)である必要があります。 iterableの最小のアイテムが返されます。 2つ以上の位置引数が指定されている場合、最小の位置引数が返されます。

オプションのkey引数は、list.sort()に使用されるような1つの引数の順序付け関数を指定します。キー引数を指定する場合は、キーワード形式にする必要があります(たとえば、min(a、b、c、key = func))。

バージョン2.5で変更:オプションのキー引数のサポートが追加されました

したがって、この例では、機能しているように見えますが(2.7でも機能します)、整数のリストが同じであるためにのみ機能します。ただし、これらが2つの異なる順序なしリストである場合、次のようになります。

min(a,b) 

最小のfirst整数のリストを返します。

2つのリストのうち短い方を確実に取得するには、次を使用します。

min(a,b, key=len)
1
deepstructure

頭を上げて、min(a, b, key=len)はpython 2.5以上でのみ機能すると思います。

(python 2.4の私のmacbookでは動作しませんが、2.5の私のLinuxサーバーは問題ありません)

1
matt

次はあなたが欲しいものですか?

if len(a) < len(b):
    print a
else:
    print b

または、@ Andrew G. Johnsonのような三項演算子を使用する場合:

print a if len(a) < len(b) else b

PS。 Pythonはブロックに中括弧を使用しないこと、およびその三項演算子はCのような言語とは異なることに注意してください。

0
A. Rex