2017-04-18 62 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] 
相关问题