if __name__ == '__main__':
arr = map(int, input().split())
a = max([x for x in arr if x != max(arr)])
print(a)
样本输入:1 2 3 4 5
这里的目标是找到第二大数
type(max(arr))
为整数,循环时arr
中的每个元素类型都是整数,那么为什么输出不是4呢?这是完美的,只有当我做arr = list(arr)
,但我想知道为什么没有它不能工作?
map
返回一个迭代器,因此它只能被使用一次。在第一次迭代中对max(arr)
的第一次调用已经在随后的每次迭代中消耗了它。
如果您想要第二大的数字,只需对数组进行排序并获得第二个(或倒数第二个,取决于您的排序方式)。这也会给你一个O(nlogn)的解决方案,而不是(可能)你试图写的O(n^2)的解决方案。
问题是arr
是一个迭代器,您只能遍历一次迭代器。
从[x for x in arr...]
开始,x得到1
的值。然后是max(arr)
,它会看到第2,3,4,5项,然后把它们都用完。它将返回5
,但现在迭代器为空。您的外部[...]
现在看到没有更多的元素要查看,并返回max(1) = 1。