簡體   English   中英

為什么我的 for 循環跳過列表中的元素?

[英]Why is my for loop skipping an element in my list?

我有一個整數列表,我通過for循環運行它以發現兩個元素的總和是否等於另一個變量t 因此,如果t等於10並且我有一個整數列表: l = [1,2,3,4,5,8,9] ,那么該函數應該打印數字(1,9)所有不同組合, (2,8)

我覺得我快到了,但是當我使用.pop()函數時,列表發生了一些奇怪的事情。 下面的代碼用於顯示需要計算的所有數字組合,但跳過列表中的所有其他元素。

l = [1,2,5,8,13,15,26,38]
c = 10
for i in l:
    first = i
    l.pop(0)
    for x in l:
        second = x
        print(first,second)

這是輸出:

1 2
1 5
1 8
1 13
1 15
1 26
1 38
5 5
5 8
5 13
5 15
5 26
5 38
13 8
13 13
13 15
13 26
13 38
26 13
26 15
26 26
26 38

請注意如何跳過281538 我正在使用l.pop()以便第二個for循環不會使用原始值,然后下一次迭代可以繼續迭代列表中的下一個元素。

您嘗試執行的操作將不起作用,因為您在迭代列表時正在修改它。 假設當前的“指針”指向第一個元素。 現在你彈出第一個,所以指針在第二個。 但是當循環前進時,指針移動到第三個,第二個被跳過。

您似乎想從列表中查找組合。 您還可以嘗試其他幾種方法:

  • 最接近您當前的方法:使用while循環而不是for循環

    while l: first = l.pop(0) for second in l: print(first, second)
  • 或者你可以只迭代索引而不是列表本身:

     for i in range(len(l)): for k in range(i+1, len(l)): print(l[i], l[k])
  • 或者只是使用itertools.combinations

     import itertools for first, second in itertools.combinations(l, 2): print(first, second)

但是,您可以做得更好。 由於您正在尋找與某個目標數字相加的一對數字,只需從目標中減去第一個即可獲得第二個數字,然后查看第二個數字是否在數字列表中。 使用set在恆定時間內進行此查找,將整體時間復雜度從 O(n²) 降低到 O(n)。

numbers = set([1,2,5,8,13,15,26,38])
target = 10
for first in numbers:
    second = target - first
    if second > first and second in numbers:
        print(first, second)

你需要選擇另一種方法。 不允許在使用 for 循環迭代列表時從列表中刪除元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM