2012-05-24 67 views
1

所以我有一个列表名为a,我想保存在一个元组中的列表中的项目的索引。例如,如果a[0][0] = 1,那么我想保存(0,0)并保存到该列表中。循环遍历列表没有太多嵌套

现在我有FF代码:

z = [] 
for i in range(0, len(a)): 
    for j in range(0, len(a)): 
     if a[i][j] == '.': 
      y = (i, j) 
      z.append(y) 

这工作完全,但我想摆脱嵌套的,所以我想知道是否有这样做没有嵌套太多的替代方法深。

+1

我不知道你从改变这个相当清楚的代码,很容易跟着获益良多。 YMMV当然。 – Levon

+0

在Python 2.x中,'xrange()'优于'range()'。 –

回答

3
from itertools import product 
for i,j in product(range(len(a)), repeat=2): 
    ... 
+3

'itertools'让你变得强大!力量击垮敌人! 'itertools'! 'itertools'! 'itertools'! –

+0

这将工作,如果行数!= cols的数量?另外,似乎锯齿状的列表可能存在问题。不过,我有兴趣了解itertools如何解决这些问题! (我是itertools新手:) – machow

+0

@Closed,你可以做'产品(范围(len(a)),范围(len(a [0])))'。不过,锯齿形的列表不起作用 –

0

一些BS这样的:

z = ((i,j) for i in range(0, len(a)) for j in range(0, len(a)) if a[i][j] == '.') 

我可能搞砸这一个 - 没有蟒蛇在家里,但这个想法是,你要使用if

+0

'范围(0,x)==范围(x)' – juliomalegria

1

你可以使用嵌套列表理解列表理解:

z = [(ii, jj) for ii, nested in enumerate(a) for jj, val in enumerate(nested) if val == '.'] 

但是,我认为你使用for循环更清晰。

编辑:另外,range默认从0开始