我正在将迭代器传递给函数,并比较迭代器中的上一个/当前/下一个项目。
下面的MRE显示,当最后两个元素相同时,我无法检查previous_item
是否等于current_item
。
def test(current):
iterator = iter(current)
previous_item = None
current_item = next(iterator)
flag = 'none'
for next_item in iterator:
if previous_item == current_item:
flag = 'here'
yield previous_item, current_item, next_item, flag
else:
flag = 'none'
yield previous_item, current_item, next_item, flag
previous_item = current_item
current_item = next_item
yield (previous_item, current_item, None, flag)
if __name__ == "__main__":
l = [0, 1, 2, 3, 3]
for prev, curr, nex, flag in test(l):
print(prev, curr, nex, flag)
实际输出:
None 0 1 none
0 1 2 none
1 2 3 none
2 3 3 none
3 3 None none
预期输出:
None 0 1 none
0 1 2 none
1 2 3 none
2 3 3 none
3 3 None here
如何评估该程序的后两个元素的逻辑,以便获得预期的结果?
此致
答案 0 :(得分:0)
def test(current):
iterator = iter(current)
previous_item = None
current_item = next(iterator)
flag = 'none'
next_item = True
while next_item:
try:
next_item = next(iterator)
except StopIteration:
next_item = None
if previous_item == current_item:
flag = 'here'
yield previous_item, current_item, next_item, flag
else:
flag = 'none'
yield previous_item, current_item, next_item, flag
previous_item = current_item
current_item = next_item
if current_item:
yield (previous_item, current_item, next_item, flag)
if __name__ == "__main__":
l = [0, 1, 2, 3, 3]
for prev, curr, nex, flag in test(l):
print(prev, curr, nex, flag)
输出
None 0 1 none
0 1 2 none
1 2 3 none
2 3 3 none
3 3 None here