如何在python中找到两个数字的最大值?

时间:2016-09-17 09:00:30

标签: python list

我想从列表中获取最大值。

O(nlogn)

如果我打印出来,我会收到List = ['1.23','1.8.1.1'] print max(List) 而不是1.8.1.1。 我做错了什么?

3 个答案:

答案 0 :(得分:1)

最简单的方法是使用元组比较 说:

versions = ['1.23','1.8.1.1']

def getVersionTuple(v):
    return tuple(map(int, v.strip().split('.')))

现在您可以使用print(max(map(getVersionTuple, versions)))来获得最大值。

修改

您可以使用'.'.join(map(str, m))获取原始字符串(给定m保存最大元组)。

答案 1 :(得分:0)

这些不是数字,它们是字符串,因此它们按字典顺序排序。由于字符8在2之后,因此返回1.8.1.1作为最大值。

解决此问题的一种方法是编写自己的比较函数,该函数将字符串的每个部分作为int并以数字方式对其进行比较:

def version_compare(a, b):
    a_parts = a.split('.')
    b_parts = b.split('.')
    a_len = len(a_parts)
    b_len = len(b_parts)
    length = min(a_len, b_len)

    # Compare the parts one by one
    for i in range(length):
        a_int = int(a_parts[i])
        b_int = int(b_parts[i])

        # And return on the first nonequl part
        if a_int != b_int:
            return a_int - b_int

    # If we got here, the longest list is the "biggest"
    return a_len - b_len

print sorted(['1.23','1.8.1.1'], cmp=version_compare, reverse=True)[0]

答案 2 :(得分:0)

类似的方法 - 假设这些字符串是版本号 - 是将版本字符串转换为整数列表:

4n

比较字符串时,会逐个字符地对它们进行比较,因此任何字符串都以' 2'开头。将在以' 8'开头的字符串前排序例如。