如何解决产生迭代器的一部分时如何检查是否相等?
我正在将迭代器传递给函数,并比较迭代器中的上一个/当前/下一个项目。
下面的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,flag
previous_item = current_item
current_item = next_item
yield (previous_item,None,flag)
if __name__ == "__main__":
l = [0,1,2,3,3]
for prev,curr,nex,flag in test(l):
print(prev,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
如何评估该程序的后两个元素的逻辑,以便获得预期的结果?
此致
解决方法
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,flag
previous_item = current_item
current_item = next_item
if current_item:
yield (previous_item,flag)
if __name__ == "__main__":
l = [0,1,2,3,3]
for prev,curr,nex,flag in test(l):
print(prev,flag)
输出
None 0 1 none
0 1 2 none
1 2 3 none
2 3 3 none
3 3 None here
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。