2013-12-18 20 views
1

比方說,我有一個列表的列表:Python:我怎樣才能返回相同的數組,每一行中的第i個元素被刪除?

[[1,2,3,4,5], [11,22,33,44,55], [111,222,333,444,555]] 

我怎麼可以簡單地返回相同的列表,其中每一行的第i個元素被刪除,因爲任何我?
例如,如果i = 2,我們得到:
[[1,2,4,5], [11,22,44,55], [111,222,444,555]]

我想:
切片,但得到的到的東西像list[0:i]麻煩時,我= 0
獲取使用my_list.index(i)索引值,其失敗,但由於功能要匹配的字符串失敗。

在此先感謝。

回答

6

您可以del第i項。

i = 2 
for x in my_list: 
    del x[i] 

... 
return my_list # Same list reference 

輸出:

[[1, 2, 4, 5], [11, 22, 44, 55], [111, 222, 444, 555]] 
+0

是不是在原始列表中使用'del'導致一個hellofa「副作用」? –

+0

是的。如果你需要刪除一個元素** in-place **,你總是需要這個副作用。如果您在其他答案下方提及我的評論,我*表示**列表理解**如果它在原始列表中引入了副作用,則不建議。我們在其他地方再次使用該清單?*。 :) – SuperSaiyan

+0

不問一個新的問題,如果我想以後再次使用該列表,該怎麼辦? –

3

據我瞭解,你不需要修改原來的列表中,您與原始名單的副本的每一個地方i個元素精內部列表被彈出。列表解析和切片來拯救!

def pop_ith(lst, i): 
    return [x[0:i] + x[i+1:] for x in lst] 

>>> a = [[1,2,3,4,5], [11,22,33,44,55], [111,222,333,444,555]] 
>>> pop_ith(a,1) 
[[1, 3, 4, 5], [11, 33, 44, 55], [111, 333, 444, 555]] 
>>> pop_ith(a,0) 
[[2, 3, 4, 5], [22, 33, 44, 55], [222, 333, 444, 555]] 
>>> pop_ith(a,4) 
[[1, 2, 3, 4], [11, 22, 33, 44], [111, 222, 333, 444]] 
>>> pop_ith(a,6) 
[[1, 2, 3, 4, 5], [11, 22, 33, 44, 55], [111, 222, 333, 444, 555]] 
+0

這很好。非常讚賞的觀點。 –

相關問題