产生迭代器的部分时如何检查相等性?
How to check for equality when yielding parts of an iterator?
我正在将迭代器传递给函数,并比较迭代器中的 previous/current/next 个项目。
下面的 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
我如何评估这个程序的最后两个元素的逻辑,以便得到我预期的结果?
此致,
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
我正在将迭代器传递给函数,并比较迭代器中的 previous/current/next 个项目。
下面的 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
我如何评估这个程序的最后两个元素的逻辑,以便得到我预期的结果?
此致,
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