簡體   English   中英

從整數字符串返回最大值和最小值

[英]Returning max and min from string of integers

所以我創建了一個簡短的函數來從單個整數字符串中檢索maxmin 字符串如下: "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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM