从整数字符串返回最大值和最小值
Returning max and min from string of integers
所以我创建了一个简短的函数来从单个整数字符串中检索 max
和 min
。字符串如下:"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"))
所以我创建了一个简短的函数来从单个整数字符串中检索 max
和 min
。字符串如下:"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"))