0

我有一个看起来像这样的列表:

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

我想知道,是否有一种单行列表理解解决方案来查找列表中的最高数字:

我努力了:

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

...但似乎有些文本无法转换,除了列表理解之外没有尝试。

我只能接受单行解决方案,请

我的代码:

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 回答