我有两个列表,我想以成对的方式迭代以选择符合我条件的对
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
。
如何将这个逻辑构建到我的循环中?
答案 0 :(得分:1)
首先,您不需要将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)