gpt4 book ai didi

python - 为什么需要将 Python 3 中的 map 对象强制转换为列表才能发挥理解作用?

转载 作者:行者123 更新时间:2023-11-28 21:42:58 24 4
gpt4 key购买 nike

这个问题来自一个基本数据类型的hackerrank问题。当我运行时

max(map(int, range(5)))

我得到正确的输出 4,但是当我这样做的时候

if __name__ == '__main__':
n = int(input()) #this line seems irrelevant to my question, but it was present in the original question so I have included it here for completeness
arr = map(int, input().split())
print(max([x for x in arr if x < max(arr)]))

并提供意见

5
2 3 6 6 5

结果是 2。但是,如果我首先将 map 对象转换为列表,我会得到正确答案 5。当我将 print 参数替换为

时,这更加令人困惑
print(max(arr))

它给出了 6 的正确答案,所以显然 max 有效,但我猜测列表理解中的某些内容由于某种原因在 map 对象上中断。如果我这样做,这一事实尤其支持这一点

print([x for x in arr if x < max(arr)])

我得到 2。对其他顺序较低的列表进行的更多测试表明,最后一条语句似乎总是返回 list(arr)[0],因此最终我认为问题出在 map 对象的列表理解上。所以最终我想知道的是

  • Python 3.5.x 如何处理导致失败的 map 对象和列表理解?
  • 有没有什么方法可以在不涉及转换的情况下以直接的方式成功处理 map 对象?

最佳答案

map的返回值在 Python 3 中不是列表,而是可迭代对象。可以很方便的变成一个列表,但是直接使用的话,是无法迭代多次的。如果为了 max 迭代它一次要计算的,你已经用完了,你不会再得到所有的元素。

在 Python 2 中,map 为您构建了一个列表,因此您无法选择延迟评估其中的项目。在 Python 3 中,您可以将其传递给 list获取列表的函数。

关于python - 为什么需要将 Python 3 中的 map 对象强制转换为列表才能发挥理解作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42954358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com