2017-04-18 47 views
0

對於爲例,說我有以下代碼:是否有可能有一個python內部'for'來繼續外部停止?

a = [[1],[2],[3]] 
for c in a: 
    print(c) 
    for d in a: 
     print(d) 

它的電流輸出爲:

[1] 
[1] 
[2] 
[3] 
[2] 
[1] 
[2] 
[3] 
[3] 
[1] 
[2] 
[3] 

我的問題是,是否有可能在一個漂亮的方式,使修改這個代碼輸出變成這樣:

[1] 
[2] 
[3] 
[2] 
[3] 
[3] 

換句話說,如果可能的話,在一個「乾淨蟒」,具有內部循環,以覆蓋從索引列表中的外環停止。

回答

1

您可以使用enumerate和列表切片語法(items[start:end:step],其中start默認爲0,enditems.length,並step 1)來實現:

items = [[1], [2], [3]] 
for i, _ in enumerate(items): 
    for item in items[i:]: 
     print(item) 

另一個有趣的(雖然效率較低)選項會這些設備一起使用itertools.accumulatesum

from itertools import accumulate 

items = [[1], [2], [3]] 
for item in sum(accumulate(([x] for x in items[::-1])), [])[::-1]: 
    print(item) 
2

我會用range個遍歷指標:

a = [[1],[2],[3]] 
for c in range(len(a)): 
    for d in range(c, len(a)): 
     print(a[d]) 
0

你可以使用一個list_iterator和分支需要淺拷貝:

import copy 
ia = iter(a) 
for ai in ia: 
    print(ai) 
    for ai in copy.copy(ia): 
     print(ai) 

# [1] 
# [2] 
# [3] 
# [2] 
# [3] 
# [3] 
相關問題