从整数字符串返回最大值和最小值

Returning max and min from string of integers

所以我创建了一个简短的函数来从单个整数字符串中检索 maxmin。字符串如下:"1 9 3 4 -5".

我的功能return如我所愿:

def high_and_low(nums):
    return f"{max(nums.split(' '))}" + " " + f"{min(nums.split(' '))}"


print(high_and_low("1 9 3 4 -5"))


>>> 9 -5

然而,当我将字符串更改为 "4 5 29 54 4 0 -214 542 -64 1 -3 6 -6" 时,它 return 根本不是我想要的!相反,它 returns 6 -214 完全忽略了 542.

这是为什么?引擎盖下发生了什么?

正在将数字字符串转换为整数。

def high_and_low(nums):
    nums_list = [int(i) for i in nums.split(' ')]
    return f"{max(nums_list)}" + " " + f"{min(nums_list)}"


print(high_and_low("1 9 3 4 -5")) # Output -> 9 -5
print(high_and_low("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6")) # Output -> 542 -214

我将解释为什么会发现这种行为。 由于变量 nums 是一个字符串,语句

nums.split(' ')

将return一个字符串列表如下。

['1', '9', '3', '4', '-5']

这里每一项都是一个字符串。 max() 函数将 return 字符串中最高的字母字符。

即。 max(nums.split(' ')) 将 return 9

为了更清楚,

string = "100008"
print(max(string))

将return8。因为,8是字符串中最高的字母字符。

只需更改 nums 的值如下:

nums = "1 63 8 3 4 -5"
max(nums.split(' '))

现在输出将是 8 而不是 68 。 这是因为在处理字符串时,比较发生在lexicographic order,所以每对字符都检查直到遇到一对不相等的字符,然后将两个不相等的字符进行比较returned .

这里'8''63'中的第一个字符'6'大,所以'8' > '63'

您在转换为 int 时得到了正确答案,因为 max() 能够将项目确定为整数,而不是将每个项目都视为单个字符。

def high_and_low(nums):
    nums = [int(i) for i in nums.split(' ')]
    return f"{max(nums)}" + " " + f"{min(nums)}"

print(high_and_low("1 810 9 3 4 33 -9 -5 -1"))