[英]Returning max and min from string of integers
所以我創建了一個簡短的函數來從單個整數字符串中檢索max
和min
。 字符串如下: "1 9 3 4 -5"
。
我的函數以我希望的方式返回它:
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"
,它根本沒有返回我想要的! 相反,它返回6 -214
完全忽略 542。
為什么是這樣? 引擎蓋下發生了什么?
我將解釋為什么會發現這種行為。 由於變量nums是一個字符串,語句
nums.split(' ')
將返回一個字符串列表,如下所示。
['1', '9', '3', '4', '-5']
這里每一項都是一個字符串。 max()函數將返回字符串中最高的字母字符。
IE。 max(nums.split(' '))
將返回9
為了更清楚,
string = "100008"
print(max(string))
將返回 8。因為,8 是字符串中最高的字母字符。
只需按如下方式更改 nums 的值:
nums = "1 63 8 3 4 -5"
max(nums.split(' '))
現在輸出將是8
而不是68
。 這是因為在處理字符串時,比較是按字典順序進行的,所以每對字符都會被檢查,直到遇到一對不相等的字符,然后返回兩個不等字符的比較結果。
這里'8'
比'63'
的第一個字符'6'
'63'
,所以'8' > '63'
您在轉換為 int 時得到了正確答案,因為max()
能夠將項目確定為整數,而不是將每個項目視為單個字符。
IE,
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"))
將數字字符串轉換為整數。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.