繁体   English   中英

在python中满足i-1条件时迭代两个列表

[英]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() ,该列表可用于进行比较。 您可以对list1list2进行切片,因为没有要与之比较的“上对的最后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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM