我试图返回一串数字的最小值和最大值,即。 (“1 2 3 4 5 6”)
我想出的代码如下
def high_and_low(numbers):
numbers = numbers.split(' ')
map(int, numbers)
return str(max(numbers)) + ' ' + str(min(numbers))
此代码不适用于以下示例:
print(high_and_low("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"))
6 -214
然而,类似的功能精心设计为:
def min_and_max(numbers):
nn = [int(s) for s in numbers.split(' ')]
return "%i %i" % (max(nn),min(nn))
返回正确答案
print(min_and_max("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6"))
542 -214
不应该
map(int, numbers)
与
相同[int(number) for number in numbers]
为什么这两个函数不返回相同的值?
答案 0 :(得分:4)
不,不应该因为你没有将map
的结果分配到任何地方,min
和max
使用来自numbers
的{{1}}。也就是说,你正在使用字符串比较。
列表理解保存到numbers.split(' ')
,这是nn
和min
中使用的名称。
尽管如此,即使你 还是max
的结果:
map
你仍然会收到错误,因为numbers = map(int, numbers)
将首先使用迭代(直到它耗尽),然后max
会抱怨,因为它会收到一个空的可迭代。
您可能需要使用min
之类的内容,同时为itertools.tee
提供min
和max
,或者使用已完成的列表理解。
答案 1 :(得分:4)
在high_and_low
方法中,map(int, numbers)
未分配给某个值。
def high_and_low(numbers):
numbers = numbers.split(' ')
numbers = map(int, numbers)
return str(max(numbers)) + ' ' + str(min(numbers))
此外,map
在Python 3.x中返回iterator
。您的min(numbers)
会出现错误,因为max
会耗尽iterator
,并因空序列而抛出ValueError
。因此,您需要将其转换为list
def high_and_low(numbers):
numbers = numbers.split(' ')
numbers = list(map(int, numbers))
return str(max(numbers)) + ' ' + str(min(numbers))
答案 2 :(得分:1)
为什么这两个函数不返回相同的值?
因为您在地图中涉及的功能无法正常使用。
当你写
def high_and_low(numbers):
numbers = numbers.split(' ')
map(int, numbers) ## DOES NOT WORK IN PLACE
## So ADD THE LINE BELOW
numbers = map(int, numbers)
return str(max(numbers)) + ' ' + str(min(numbers))
你必须在某处重新分配numbers
,如此
numbers = map(int, numbers)