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

use*_*105 3 python sorting string alphanumeric

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

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

[A, B, C, 0, 1, 2]
Run Code Online (Sandbox Code Playgroud)

我需要抓住2.

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

[0, 1, 2, A, B, C]
Run Code Online (Sandbox Code Playgroud)

Kev*_*vin 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'
Run Code Online (Sandbox Code Playgroud)

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

>>> 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
Run Code Online (Sandbox Code Playgroud)

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