2016-12-02 108 views
0

假設我有填充索引列表去除刪除某些索引

remove = [0, 2, 4, 5, 7, 9, 10, 11] 

然後,我必須列出的另一份名單,如

l = [['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'], ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']] 

我想在刪除值刪除索引

+2

隨着您刪除元素,您的指標ces改變... –

+0

甚至沒有想到 –

+0

你有錯誤嗎?像一個'IndexError'?我的第一個猜測是,由於您從頭開始刪除元素,因此每次刪除某些內容時,列表的右側部分都會左移,導致您最終要刪除的某些索引超出範圍。 –

回答

1

如果您執行一步一步執行,問題將變得明顯。

隨着您刪除元素,下列元素的位置發生變化。例如,如果從列表中刪除元素0,元素1的元素將變爲元素0.

如果您想堅持使用當前方法,只需按相反順序遍歷索引(不需要值,只需使用range)。

+0

我很困惑這是什麼意思「遍歷索引在相反的順序「 –

+0

@JetAlex刪除元素在'11',然後在'10',然後在'9',然後在'7' ... –

3

如果你沒有做到這一點的地方,你可以構建基於索引的新名單:

[[v for i, v in enumerate(s) if i not in to_remove] for s in l] 
# [['b', 'd', 'g', 'i'], ['b', 'd', 'g', 'i']] 
+1

我很困惑,這意味着什麼,我從來沒有學過這樣的語法 –

+0

這是'list comprehension'。這是構建列表的一種非常常見的方式。你可以谷歌*列表理解蟒蛇*更多。 – Psidom

+0

@JetAlex,你不需要使用列表理解。如果你有能力複製數據,Psidom的想法很簡單,很好。 – Javier

0

如果你不想列表解析,你可以使用一個像情侶循環所以:

for x in remove[::-1]: 
    for list in l: 
     del list[x] 

[[ 'b', 'd', 'G', 'I'],[ 'b', 'd', 'G', 'I'〕]