[英]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.