lzb1001 发表于 2023-6-7 16:09:57

为何输出空列表?

本帖最后由 lzb1001 于 2023-6-7 16:16 编辑

>>> def fun(x):
      return x * 2

>>> temp = range(10)
>>> show = map(fun, temp)
>>> list(show)

>>> print(list(show)) # 为何输出空列表[]???
[]


再看下面:

>>> temp = filter(None, )
>>> print(list(temp)) # 这样可以


>>> temp = filter(None, )
>>> list(temp)

>>> print(list(temp)) # 这样不可以
[]

isdkz 发表于 2023-6-7 16:22:18

在Python中, map 函数返回的是一个迭代器。迭代器可以被遍历一次,但是遍历过后就无法再次使用了。它的内容会被消耗掉。

在你的代码中, list(show) 会遍历一次 show 迭代器,返回一个包含所有结果的列表。然而,在这之后, show 迭代器就已经被遍历完了,所以当你再次尝试转化为列表时,它已经没有内容可以返回了,因此结果是一个空列表。

如果你想要再次使用这个列表,你可以将它存储在一个变量中,例如:

>>> def fun(x):
      return x * 2

>>> temp = range(10)
>>> show = map(fun, temp)
>>> output = list(show)# 将结果存储在变量output中
>>> print(output)

>>> print(output)# 可以再次打印output

lzb1001 发表于 2023-6-7 17:25:44

isdkz 发表于 2023-6-7 16:22
在Python中, map 函数返回的是一个迭代器。迭代器可以被遍历一次,但是遍历过后就无法再次使用了。它的内 ...

在Python中, map 函数返回的是一个迭代器……

不单是map函数,filter函数返回的也是一个迭代器吧

isdkz 发表于 2023-6-7 17:34:54

lzb1001 发表于 2023-6-7 17:25
在Python中, map 函数返回的是一个迭代器……

不单是map函数,filter函数返回的也是一个迭代器吧

对的

lzb1001 发表于 2023-6-7 17:44:25

isdkz 发表于 2023-6-7 16:22
在Python中, map 函数返回的是一个迭代器。迭代器可以被遍历一次,但是遍历过后就无法再次使用了。它的内 ...

def fun(x):
        return x * 2

>>> temp = range(10)
>>> show = map(fun, temp)

>>> result = list(show) # 使用变量储存列表

>>> result


>>> print(result) # 可多次使用


>>> print(result) # 可多次使用


>>> list(show)
[]
>>> print(list(show))
[]

以上在哪步都遍历完了,导致最后 list(show)和print(list(show))都返回空列表[]???

isdkz 发表于 2023-6-7 17:45:42

lzb1001 发表于 2023-6-7 17:44
def fun(x):
        return x * 2



result = list(show)

这里你把它转成列表的时候就把它所有的元素都遍历出来了
页: [1]
查看完整版本: 为何输出空列表?