如何使用Python获取字母数字列表中的最高值?

时间:2014-01-03 17:36:34

标签: python string sorting alphanumeric

如果我有一个字符串列表,例如["A", "B", "1", "0", "C", "2"],我怎样才能让Python优雅地获取该列表的“最高”值(2)?

例如,如果上面的列表要从最低到最高排序,那么它将是

[A, B, C, 0, 1, 2]

我需要抓住2

使用sorted(),按以下方式组织列表

[0, 1, 2, A, B, C]

5 个答案:

答案 0 :(得分:6)

您可以为sorted提供一个自定义键,导致非数字字符出现在数字之前:

>>> x = ["A", "B", "1", "0", "C", "2"]
>>> sorted(x, key = lambda item: (item.isdigit(), item))
['A', 'B', 'C', '0', '1', '2']
>>> max(x, key = lambda item: (item.isdigit(), item))
'2'

更通用的解决方案可能是明确指定所需的排序类型。如果您改变对“最高”的想法,可以轻松更改实施。

>>> ordering = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
>>> x = ["A", "B", "1", "0", "C", "2"]
>>> print max(x, key=ordering.index)
2

>>> #Actually, I've decided that A should be highest!
>>> ordering = "BCDEFGHIJKLMNOPQRSTUVWXYZ0123456789A"
>>> print max(x, key=ordering.index)
A

这可能比第一个解决方案慢一点,因为index在线性时间内运行,但如果您觉得它使代码更容易理解,您可能会发现这种权衡是值得的。

答案 1 :(得分:0)

my_list = ["A", "B", "1", "0", "C", "2"]
my_list.sort()
print(my_list[-1])

然而,这将打印“C”。 Letters are "greater than" numbers in ASCII

您是否要考虑数字高于'字母?

答案 2 :(得分:0)

a = ["A", "B", "1", "0", "C", "2"]
max([x for x in a if x.isdigit()])

答案 3 :(得分:0)

这遍历列表并将max的值设置为每个的值,如果每个都是aumber并且大于当前的max值:

max = 0
for item in lst:
    if not item.isalpha():
        if int(item) > max:
            max = int(item)
        else:
            pass

print(max)

答案 4 :(得分:0)

如果您的目标是获取列表元素中的最大数字,则可以尝试将数字转换为整数,然后找到最大值。

def casted_max(l):
    casted = [int(m) for m in l if m.isdigit()]
    if casted:
        return max(casted)
    else:
        return -1