鱼C论坛

 找回密码
 立即注册
查看: 1835|回复: 5

为何输出空列表?

[复制链接]
发表于 2023-6-7 16:09:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

>>> temp = range(10)
>>> show = map(fun, temp)
>>> list(show)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
>>> print(list(show)) # 为何输出空列表[]???
[]


再看下面:

>>> temp = filter(None, [0, 1, False, True])
>>> print(list(temp)) # 这样可以
[1, True]

>>> temp = filter(None, [0, 1, False, True])
>>> list(temp)
[1, True]
>>> print(list(temp)) # 这样不可以
[]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
>>> print(output)  # 可以再次打印output
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

不单是map函数,filter函数返回的也是一个迭代器吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-7 17:34:54 | 显示全部楼层
lzb1001 发表于 2023-6-7 17:25
在Python中, map 函数返回的是一个迭代器……

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

对的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

>>> print(result) # 可多次使用
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

>>> print(result) # 可多次使用
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

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

以上在哪步都遍历完了,导致最后 list(show)和print(list(show))都返回空列表[]???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-7 17:45:42 | 显示全部楼层
lzb1001 发表于 2023-6-7 17:44
def fun(x):
        return x * 2

result = list(show)

这里你把它转成列表的时候就把它所有的元素都遍历出来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 21:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表