簡體   English   中英

嵌套在“列表”和“迭代器”中的 for 循環

[英]Nested for loop in 'lists' and 'iterators'

我有這兩個清單

l1 = [1,2,3]
l2 = [10,20,30]

我使用這個嵌套的 for 循環來訪問所有可能的對:

for a in l1:
    for b in l2:
        print(a,b)

我得到以下預期結果:

1 10
1 20
1 30
2 10
2 20
2 30
3 10
3 20
3 30

但是,如果我將 l1 和 l2 轉換為迭代器,我會得到不同的結果,並且我無法訪問所有對:

l1=iter(l1)
l2=iter(l2)

for a in l1:
    for b in l2:
        print(a,b)

1 10
1 20
1 30

我無法理解這兩個代碼片段之間的區別。 為什么迭代器會產生這個結果?

l2=iter(l2)

這從l2創建了一個迭代器。 一個迭代器只能迭代一次 之后,interator就完成了。 如果您想再次迭代l2 ,則需要從中創建另一個迭代器。

for a in l1:
    for b in l2:
        print(a,b)

這將嘗試迭代l2 - 對l1中的每個項目進行一次。 如果l1中有超過 1 個項目,那將不起作用 - 因為l2迭代器在第一次迭代后已經用盡。

所以你需要這樣的東西:

l1 = iter(l1)

for a in l1:
    l2_iter = iter(l2)
    for b in l2_iter:
        print(a,b)

這會做你所期望的。

暫無
暫無

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

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