我正在尝试编写一个返回列表中最高和最低编号的函数。
def high_and_low(numbers):
return max(numbers), min(numbers)
print(high_and_low("1 2 8 4 5"))
但我有这个结果:
('8', ' ')
为什么' '
为最低数字?
答案 0 :(得分:4)
您正在将字符串传递给函数。为了获得所需的结果,您需要拆分字符串,然后将每个元素类型转换为int
。然后,只有您的min
和max
功能才能正常运行。例如:
def high_and_low(numbers):
# split numbers based on space v
numbers = [int(x) for x in numbers.split()]
# ^ type-cast each element to `int`
return max(numbers), min(numbers)
示例运行:
>>> high_and_low("1 2 8 4 5")
(8, 1)
目前,您的代码正在根据字符的lexicographical order查找最小值和最大值。
答案 1 :(得分:2)
为了达到您想要的效果,您可以在传入的字符串上调用split()
。这实际上会创建一个list()
输入字符串 - 您可以将其称为min()
和max()
函数。
def high_and_low(numbers: str):
"""
Given a string of characters, ignore and split on
the space ' ' character and return the min(), max()
:param numbers: input str of characters
:return: the minimum and maximum *character* values as a tuple
"""
return max(numbers.split(' ')), min(numbers.split(' '))
正如其他人所指出的那样,你也可以传递一个你想要比较的值列表,并且可以调用 min 和 max 直接的功能。
def high_and_low_of_list(numbers: list):
"""
Given a list of values, return the max() and
min()
:param numbers: a list of values to be compared
:return: the min() and max() *integer* values within the list as a tuple
"""
return min(numbers), max(numbers)
您的原始功能在技术上有效,但它会比较每个字符的数值,而不仅仅是整数值。
答案 2 :(得分:1)
使用映射的另一种(更快)方法:
def high_and_low(numbers: str):
#split function below will use space (' ') as separator
numbers = list(map(int,numbers.split()))
return max(numbers),min(numbers)
答案 3 :(得分:0)
您可以将字符串拆分为' '
并将其作为数组
def high_and_low(numbers):
# split string by space character
numbers = numbers.split(" ")
# convert string array to int, also making list from them
numbers = list(map(int, numbers))
return max(numbers), min(numbers)
print(high_and_low("1 2 10 4 5"))
答案 4 :(得分:0)
使用numbers_list=[int(x) for x in numbers.split()]
并在numbers_list
和min()
中使用max()
。
split()
将'1 23 4 5'
变为['1','23','4','5']
;通过使用列表推导,所有字符串都转换为整数。