一百零二
因为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)