【问题标题】:python using max function on a sub stringpython在子字符串上使用max函数
【发布时间】:2018-03-29 09:24:05
【问题描述】:

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

list =  [u'5.0', u'5.1', u'5.2', u'5.3', u'5.4', u'5.5', u'5.6', u'5.7', u'5.8', u'5.9', u'5.10', u'5.11'

我试图获得 5 之后的最高数字。意思是 5.11

我不能在这里使用 max 函数,因为它会返回 5.9

max(list)

结果是 5.9 而不是 5.11

有没有办法在 5 之后的第二个值上运行最大值。所以我会得到 11?

我试图创建一个新的次要版本列表,并对其应用 max 但它在 5 之后只显示一个字符。可能有更好的方法

for minor in list:
    print(minor[2])

0
1
2
3
4
5
6
7
8
9
1
1
1
1
1
1

【问题讨论】:

  • 我猜是因为 9 大于 1。如果您需要不同的行为,您可能需要创建自己的比较器函数。

标签: python


【解决方案1】:

您可以通过首先拆分'.' 上的每个字符串并获取第二部分来仅比较(相应浮点数的)小数部分:

print(max(lst, key=lambda x: int(x.split('.')[1])))
# 5.11

如果整数部分不一样,可以先比较一下,再用小数部分打平:

max(lst, key=lambda x: tuple(map(int, x.split('.'))))

>>> lst = ['4.123', '5.053', '5.009']
>>> max(lst, key=lambda x: tuple(map(int, x.split('.'))))
'5.053'

【讨论】:

  • 但这仅适用于 5 位小数,如果我没记错的话,当数据为 list=['4.123','5.009'] 时它可能会失败
  • @chakri 已更新。
【解决方案2】:

这样做:

list =  [u'5.0', u'5.1', u'5.2', u'5.3', u'5.4', u'5.5', u'5.6', u'5.7', u'5.8', u'5.9', u'5.10', u'5.11']
minor_list = [int(i[2:]) for i in list]
print("5." + str(max(minor_list))) # should work

for item in list:
    print(item[2:])

https://repl.it/MmK9

【讨论】:

    【解决方案3】:
    print(max(list,key=lambda x:int(x.replace(".",""))))
    

    【讨论】:

    • 解释代码通常比粘贴和发布更有帮助。
    猜你喜欢
    • 2021-11-17
    • 2015-05-08
    • 2013-04-08
    • 2015-04-02
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 2023-02-21
    相关资源
    最近更新 更多