0

次のようなリストがあります。

target = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '...', '1458', 'Next']

リスト内の最大数を見つけるための1行のリスト理解ソリューションはありますか?

私が試してみました:

max([int(num) for num in text])

...しかし、一部のテキストは変換できないようで、リスト内包表記以外には試行がありません。

1行の解決策しか受け入れられません。お願いします

私のコード:

text = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '...', '1458', 'Next']
print text
max = 0
for num in text:
    try:
        if int(num) > max:
            max = int(num)
    except:
        pass
print max
4

1 に答える 1

13

文字列を変換できるstr.isdigit()かどうかをテストするために使用できます。

max(int(num) for num in text if num.isdigit())

ここではジェネレータ式で十分です。中間リストを作成する必要はありません。

デモ:

>>> text = ['2', '3', '4', '5', '6', '7', '8', '9', '10', '...', '1458', 'Next']
>>> max(int(num) for num in text if num.isdigit())
1458

int()空白も許容されることに注意してください。入力リストの数字の周りに空白があると思われる場合は、str.strip()呼び出しを追加してネットを少し広げることができます。

max(int(num) for num in text if num.strip().isdigit())

-符号付きの値 (イニシャルまたは)もサポートする必要がある場合は、+次を試すことができます。

max(int(num) for num in text if num.strip().lstrip('-+').isdigit() and num.count('-') + num.count('+') <= 1)

さらに徹底的なテストのために。int()まだもう少し寛容ですが、ほとんどの場合、これで十分です。ありとあらゆる可能性を捉えたい場合は、正規表現に頼る必要があります。

デモ:

>>> text = [' +2 ', '-3', '     4', '5    ', '6', '7', '8', '9', '10', '...', '  +1458  ', 'Next']
>>> max(int(num) for num in text if num.strip().lstrip('-+').isdigit() and num.count('-') + num.count('+') <= 1)
1458
于 2013-09-05T16:34:52.420 に答える