[英]Iterate through pairs in a Python list and update the pairs during the iteration
嗨,我正在尝试编写一个代码,以遍历列表中的对并在条件满足时更新对
List=[A1,A2,A4,A5,E3,A3,E1,A7,E2,E3]
这是我到目前为止的内容:
def pairwise(ListX):
"Pairs -> (A1,A2), (A2,A4), (A4, A5),(A5, E3),(E3, A3),(A3, E1), ..."
a, b = tee(ListX)
next(b, None)
return izip(a, b)
for a, b in pairwise(List):
if a!= b and a == 'E':
do something and switch positions
在这种情况下,将切换对(E3,A3),新的订单将是(A3,E3),然后要迭代的新对将是(E3,E1),而不是(A3,E1)。 到目前为止,我拥有的代码可以执行操作并切换列表的顺序:
List=[A1,A2,A4,A5,E3,A3,E1,A7,E2,E3] <--Initial
List=[A1,A2,A4,A5,A3,E3,E1,A7,E2,E3] <--Switched
但是,在开关之后,请继续在线对(A3,E1)上进行迭代。
有什么建议么?
我认为没有理由使用成对函数,因为它返回了新对象。
l = ['A1', 'A2', 'A4', 'A5', 'E3', 'A3', 'E1', 'A7', 'E2', 'E3']
for i in range(len(l)-1):
if l[i] != l[i+1] and l[i][:1] == 'E':
l[i], l[i+1] = l[i+1], l[i]
break
print(l)
如果删除下一个break
对,则为('E3','E1')
由于实现itertools.tee
方式,您的代码无法正常工作。 因为它适用于任意迭代器(不仅是序列),所以需要存储其中一个迭代器而不是另一个迭代器产生的值。
但是,您可以解决此问题,因为实际上是在列表上调用pairwise
函数,您可以独立地迭代多次。
def pairwise(ListX):
a = iter(ListX)
b = iter(ListX)
next(b, None)
return izip(a, b)
现在,如果在迭代对时修改ListX
,将始终看到更新。
请注意,为了有效地进行修改,您可能需要使用enumerate
来获取索引和对值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.