python map意外结果


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。

相关内容

  • 没有找到相关文章

最新更新