2016-01-28 102 views
1

我想迭代列表的列表和列表的元組列表在同一時間,列表中的列表與列表中的值元組列表。遍歷列表的列表和列表的列表

這是到目前爲止我的代碼:

tups = [(1,2,3),(4,5,6),(9,8,7)] 

lsts = [[[1, 0, 1], [2, 3, 1, 0], [1, 1, 1, 1, 10, 0]], \ 
     [[1, 0, 1], [2, 3, 1, 0], [1, 1, 1, 1, 10, 0]], \ 
     [[1, 0, 1], [2, 3, 1, 0], [1, 1, 1, 1, 10, 0]]] 


for index1, aitem in enumerate(tups): 
    for index2, a in enumerate(aitem): 
     for index3, mega_item in enumerate(lsts): 
      for index4, bitem in enumerate(mega_item): 
       for index5, b in enumerate(item): 
        if i == 0: 
         lsts[index3][index4][index5] = a 
         break 
        else: 
         continue 
        break 
       else: 
        continue 
       break 
      else: 
       continue 
      break 

我想我的解決方案,以生產具有順序在tups由值代替這樣的0 LSTS:

lsts = [[[1, 1, 1], [2, 3, 1, 2], [1, 1, 1, 1, 10, 3]], \ 
     [[1, 4, 1], [2, 3, 1, 5], [1, 1, 1, 1, 10, 6]], \ 
     [[1, 9, 1], [2, 3, 1, 8], [1, 1, 1, 1, 10, 7]]] 

然而,我目前的結果是:

lsts = [[[1, 1, 1], [2, 3, 1, 2], [1, 1, 1, 1, 10, 3]], \ 
     [[1, 1, 1], [2, 3, 1, 2], [1, 1, 1, 1, 10, 3]], \ 
     [[1, 1, 1], [2, 3, 1, 2], [1, 1, 1, 1, 10, 3]]] 

我相信我的循環可能只是迭代冷杉t元素列表中的元組。

我該如何解決這個問題?

+0

你應該通過'並行的方式lsts'和'tups'迭代,使用'zip' .. –

回答

3

這應該工作:

for inner_lst,inner_tup in zip(lsts,tups): 
    for ind,depth in enumerate(inner_lst): 
      depth[depth.index(0)]= inner_tup[ind] 

print lsts 

輸出:

[[[1, 1, 1], [2, 3, 1, 2], [1, 1, 1, 1, 10, 3]], 
[[1, 4, 1], [2, 3, 1, 5], [1, 1, 1, 1, 10, 6]], 
[[1, 9, 1], [2, 3, 1, 8], [1, 1, 1, 1, 10, 7]]] 
+0

該作品但是如果我想從列表的原始列表(lsts = [lst] * 3)創建lsts,則會產生此錯誤:文件「」,第3行,在 depth [depth.index(0)] = inner_tup [ ind] ValueError:0不在列表中。我怎麼解決這個問題? – jcdrbm

+0

http://stackoverflow.com/questions/240178/python-list-of-lists-changes-reflected-across-sublists-unexpectedly這將幫助你在你的方法中找到問題 –

+0

當我使用時,這仍會引發同樣的錯誤列表理解(lsts = [在範圍(3)中n爲1)] ...爲什麼這不起作用? – jcdrbm

1

簡單的嵌套for循環運作良好。

for i in xrange(len(tups)): 
for j in xrange(len(tups[i])): 
    index = lsts[i][j].index(0) 
    lsts[i][j][index] = tups[i][j] 

輸出爲:

for s in lsts: 
print s 

是:

[[1, 1, 1], [2, 3, 1, 2], [1, 1, 1, 1, 10, 3]] 
[[1, 4, 1], [2, 3, 1, 5], [1, 1, 1, 1, 10, 6]] 
[[1, 9, 1], [2, 3, 1, 8], [1, 1, 1, 1, 10, 7]]