2017-09-19 24 views
-5

我有蟒蛇兩個嵌套表,例如:有效的方式列出的兩個列表一起拼接在python

lst1 = [ 
     [ [1,2],[3,4] ], [ [5,6,7],[8,9,10] ] 
     ] 
lst2 = [ 
     [ [11,12],[13,14] ], [ [15,16,17],[18,19,20] ] 
     ] 

我希望能夠把對應的扁平版本的索引列表並返回「交叉」列表:

例如指數是5,輸出新的列表

lst3 = [ 
     [ [1,2],[3,4] ], [ [5,16,17],[18,19,20] ] 
     ] 

我可以做一個三重嵌套循環做到這一點,但我知道必須有蟒蛇更快的方式,可能會使用迭代器?

編輯:我是問如何更有效地做到以下幾點:

lst1 = [ 
     [ [1,2],[3,4] ], [ [5,6,7],[8,9,10] ] 
     ] 
lst2 = [ 
     [ [11,12],[13,14] ], [ [15,16,17],[18,19,20] ] 
     ] 


lst3 = [] 

counter = 0 
for i in xrange(len(lst1)): 
    for j in xrange(len(lst1[i])): 
     temp1 = [] 
     for k in xrange(len(lst1[i][j])): 
      temp2 = [] 
      counter += 1 
      if counter > 5: 
       temp2.append(lst2[i][j][k]) 
      else: 
       temp2.append(lst1[i][j][k]) 
      temp1.append(temp2) 
     lst3.append(temp1) 

print lst1 
print lst2 
print lst3 

lst3結果:

[[[1], [2]], [[3], [4]], [[5], [16], [17]], [[18], [19], [20]]] 
+0

你將不得不解釋如何輸入相應的輸出。 – user2357112

+0

通過[教程](https://docs.python.org/3/tutorial/index.html#the-python-tutorial)工作,瞭解可用的工具。也許首先寫在紙上,用你的*自然語言,完成任務所需的步驟。試着把它變成僞代碼,最後是實際的代碼。如果你遇到實際的代碼,請回來問問。請閱讀[問]和[mcve]。 – wwii

回答

1

我不太清楚你的意思由「交叉記號」列表,但似乎你正在試圖做某種regex的列表。但是你也提到你想要一個平坦的列表,即使你的輸出沒有被展平。

所以,我不確定你在問什麼。但是,如果使用標題作爲一種手段來猜你在找什麼,那麼答案很簡單,使用list comprehension

>>> lst3 = [x for x in [lst1, lst2]] 

這將給以下結果:

>>> lst3 
[[[[1, 2], [3, 4]], [[5, 6, 7], [8, 9, 10]]], [[[11, 12], [13, 14]], [[15, 16, 17], [18, 19, 20]]]] 

這是兩個列表的組合。不知道它是否是你想要的「組合」,因爲它可以被很多方式解釋,我不能確切地說出你想要的。

+0

列表理解是多餘的; '[lst1,lst2]'已經產生了相同的列表。 – user2357112

+0

爲真。這是多餘的。我以這種方式提交了它,因爲它似乎*就像OP想要做更多的事情一樣,比如過濾掉其中一個列表。這已經在列表理解中變得更容易了。 –

相關問題