在 Python 中对 map() 应用 min()
Applying min() on map() in Python
当我在 map() 上应用 min() 时,我得到以下特定代码的结果:
a = map(int, input().split())
print(min(a))
for i in a:
print(i)
对于输入:
5 7 10 5 15
我得到的结果是:
5
这是最小值,但不执行for循环
但是如果我写:
a = map(int, input().split())
for i in a:
print(i)
然后对于相同的输入,它执行 for 循环,我得到结果:
5
7
10
5
15
为什么在 'for' 循环停止 'for' 循环执行之前使用 'min()'?
当您在 python 中使用 map 函数时,它 returns 生成器。
然后当您使用 min 函数调用它时,它会遍历该生成器并使生成器在内部指向可迭代对象的末尾。
然后你尝试在那个生成器上重复,但它已经失去了它的初始“索引”并指向可迭代对象的末尾
在 Python 2 中,map() 返回了一个 list,在那个环境中,您期望的行为会已经发生了。
然而,在Python3中,map()returns一个map对象,它是一个迭代器.
当您将迭代器传递给诸如 min() 之类的函数时,它将被消耗 - 即任何后续从中获取数据的尝试都将失败(没有任何错误,但好像迭代器已经自然耗尽了)。
要在 OP 的代码中获得所需的行为,只需执行以下操作:
a = list(map(int, input().split()))
您传递给 min()
is the result of a map()
的内容,它是一个生成器。它的值在 for
循环有机会使用它们之前被 min()
函数使用。
如果您使用生成器并将其值再次放入列表中,您可以根据需要迭代任意多次。
a = list(map(int, input().split()))
print(min(a))
for i in a:
print(i)
a = map(int, input().split())
这个命令returns一个迭代器对象。此外,为了在内部处理任何迭代器,next
被许多内部函数使用。一旦没有 next
输出或没有 next
对象,它就会退出(有关更多信息,请参见 __next__
实现)。
在情况1中,min
函数使用了这个属性并遍历了这个迭代器并返回了最小值,其中next
指向none ,所以 for 循环在那里不起作用。
虽然情况 2.next
对象仍然指向 map
对象的第一个元素,因此可以对该对象进行 运行 迭代,这就是为什么在那里循环工作。
当我在 map() 上应用 min() 时,我得到以下特定代码的结果:
a = map(int, input().split())
print(min(a))
for i in a:
print(i)
对于输入: 5 7 10 5 15
我得到的结果是:
5
这是最小值,但不执行for循环
但是如果我写:
a = map(int, input().split())
for i in a:
print(i)
然后对于相同的输入,它执行 for 循环,我得到结果:
5
7
10
5
15
为什么在 'for' 循环停止 'for' 循环执行之前使用 'min()'?
当您在 python 中使用 map 函数时,它 returns 生成器。
然后当您使用 min 函数调用它时,它会遍历该生成器并使生成器在内部指向可迭代对象的末尾。
然后你尝试在那个生成器上重复,但它已经失去了它的初始“索引”并指向可迭代对象的末尾
在 Python 2 中,map() 返回了一个 list,在那个环境中,您期望的行为会已经发生了。
然而,在Python3中,map()returns一个map对象,它是一个迭代器.
当您将迭代器传递给诸如 min() 之类的函数时,它将被消耗 - 即任何后续从中获取数据的尝试都将失败(没有任何错误,但好像迭代器已经自然耗尽了)。
要在 OP 的代码中获得所需的行为,只需执行以下操作:
a = list(map(int, input().split()))
您传递给 min()
is the result of a map()
的内容,它是一个生成器。它的值在 for
循环有机会使用它们之前被 min()
函数使用。
如果您使用生成器并将其值再次放入列表中,您可以根据需要迭代任意多次。
a = list(map(int, input().split()))
print(min(a))
for i in a:
print(i)
a = map(int, input().split())
这个命令returns一个迭代器对象。此外,为了在内部处理任何迭代器,next
被许多内部函数使用。一旦没有 next
输出或没有 next
对象,它就会退出(有关更多信息,请参见 __next__
实现)。
在情况1中,min
函数使用了这个属性并遍历了这个迭代器并返回了最小值,其中next
指向none ,所以 for 循环在那里不起作用。
虽然情况 2.next
对象仍然指向 map
对象的第一个元素,因此可以对该对象进行 运行 迭代,这就是为什么在那里循环工作。