[英]Iterate over two lists while i-1 condition is met in python
我有两个列表,我想以成对方式进行迭代,以选择满足我条件的对
list1 = [0, 6, 22, 29]
list2 = [3, 38, 48]
我使用zip
遍历它们:
for i, j in list(zip(list1, list2)):
print(i, j)
这返回
0 3
6 38
22 48
这可以正常工作,但我要在以下条件下构建:仅当一对的第一个值( i
)大于上一个对的最后一个值( j
)时,才返回该对。
在这种情况下,前两对是正确的,但是第三对不是正确的,因为6:48
包含22
。
如何将这种逻辑构建到循环中?
首先,您不需要将zip()
转换为list()
,因为您只是在遍历它。
然后,您可以将第三个列表添加到zip()
,该列表可用于进行比较。 您可以对list1
和list2
进行切片,因为没有要与之比较的“上对的最后j
值”。
第三个参数list2
将用于检查条件。 在迭代期间,其元素k
为“后一个索引”,因此它等于遇到的最后一个j
。
for i, j, k in zip(list1[1:], list2[1:], list2):
if i > k:
print(i, j)
如果您需要包括第一对,则可以使用@schwobaseggl找到的这个不错的技巧:
for i, j, k in zip(list1, list2, [-1] + list2):
if i > k:
print(i, j)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.