在python中遇到i-1条件时迭代两个列表

时间:2016-05-15 19:15:28

标签: python for-loop

我有两个列表,我想以成对的方式迭代以选择符合我条件的对

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)时,才会返回该对。

在这种情况下,前两对是正确的,但第三对不正确,因为22中包含6:48

如何将这个逻辑构建到我的循环中?

1 个答案:

答案 0 :(得分:1)

首先,您不需要将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)