代码:

nums = {1,2,3,4,5,6}
nums = {0,1,2,3} & nums
print(nums)
nums=filter(lambda x: x > 1, nums)
print(nums)
print(len(list(nums)))
print(len(list(nums)))

以下是输出:

{1, 2, 3}
<filter object at 0x000001FDFECD2850>
2
0

为什么打印(len(list(Number)会输出不同的结果?

推荐答案

一百零二 因为filter函数返回iterator,而第一个调用列表函数使用迭代器的所有元素,所以在同一迭代器上第二次调用列表函数时,您将得到一个空列表.

Deep insight: 术语"消费"是一个非正式的术语,指的是迭代器在Python中的工作方式."迭代器"是负责创建元素序列的单个对象.
当调用方从迭代器请求"Next"元素时,迭代器提供下一个元素,然后更改其状态,以便它准备生成下一个元素.
如果将Iterable作为参数传递,则内置函数list将"使用"Iterable对象,并创建由Iterable的项组成的列表.

Example: 如果我有一个数字为2到6的迭代器,当我第一次将其称为"Next"时,我将返回2,元素[3,4,5,6]仍保留在迭代器中(测试1).下一次,我将得到3,而[4,5,6]将保留在迭代器中(测试2).下一次,我将得到4,并且在迭代器中它们将保持[5,6](测试3).依此类推,直到迭代器为空,并且迭代器上的"下一步"操作引发StopIteration异常(测试4). 测试:

print("\n** TEST 1 **")
nums = [1,2,3,4,5,6]
iter_nums = filter(lambda x: x > 1, nums)
print("Item Consumed: ", next(iter_nums))
print("Item remained in the iterator:", list(iter_nums))

# ** TEST 1 **
# Item Consumed:  2
# Item remained in the iterator: [3, 4, 5, 6]


print("\n**TEST 2 **")
iter_nums = filter(lambda x: x > 1, nums)
print("Item Consumed: ", next(iter_nums))
print("Item Consumed: ", next(iter_nums))
print("Item remained in the iterator:", list(iter_nums))

# ** TEST 2 **
# Item Consumed:  2
# Item Consumed:  3
# Item remained in the iterator: [4, 5, 6]


print("\n**TEST 3 **")
iter_nums = filter(lambda x: x > 1, nums)
print("Item Consumed: ", next(iter_nums))
print("Item Consumed: ", next(iter_nums))
print("Item Consumed: ", next(iter_nums))
print("Item remained in the iterator:", list(iter_nums))

# ** TEST 3 **
# Item Consumed:  2
# Item Consumed:  3
# Item Consumed:  4
# Item remained in the iterator: [5, 6]


print("\n**TEST 4 **")
iter_nums = filter(lambda x: x > 1, nums)
print("Item Consumed: ", next(iter_nums))
print("Item Consumed: ", next(iter_nums))
print("Item Consumed: ", next(iter_nums))
print("Item Consumed: ", next(iter_nums))
print("Item Consumed: ", next(iter_nums))
print("Item Consumed: ", next(iter_nums))
print("Item remained in the iterator:", list(iter_nums))
# ** TEST 3 **
# Item Consumed:  2
# Item Consumed:  3
# Item Consumed:  4
# Item Consumed:  5
# Item Consumed:  6
# ------------ StopIteration   Traceback (most recent call last)

Python相关问答推荐

Python 3.12中的通用[T]类方法隐式类型检索

比较两个数据帧并并排附加结果(获取性能警告)

删除最后一个pip安装的包

处理(潜在)不断增长的任务队列的并行/并行方法

沿着数组中的轴计算真实条目

将数据框架与导入的Excel文件一起使用

为什么这个带有List输入的简单numba函数这么慢

' osmnx.shortest_track '返回有效源 node 和目标 node 的'无'

大小为M的第N位_计数(或人口计数)的公式

如何从需要点击/切换的网页中提取表格?

为什么\b在这个正则表达式中不解释为反斜杠

Pandas:填充行并删除重复项,但保留不同的值

Gunicorn无法启动Flask应用,因为无法将应用解析为属性名或函数调用.'"'' "

Python—为什么我的代码返回一个TypeError

当HTTP 201响应包含 Big Data 的POST请求时,应该是什么?  

时长超过24小时如何从Excel导入时长数据

PYTHON中的selenium不会打开 chromium URL

递归链表反转与打印语句挂起

如何在Polars中处理用户自定义函数的多行结果?

保存由PYTHON在EXCEL中所做更改的问题