2016-11-21 20 views
0

のリストに従って、リストから項目を削除します。私はそうのような項目のリストを持っているインデックス

A = [[0 A B],[1 C D],[2 E F],[3 G H],[4 I L],[5 M N],[6 O P],[7 Q R],[8 S T],[9 U Z]] 

ので、同様に、私はその後、別のリストを定義します。

index = [0,2,6] 

私の目標は、削除することですAから1、3、7をリストし、結果は次のようになります。

A = [[1 C D],[3 G H],[4 I L],[5 M N],[7 Q R],[8 S T],[9 U Z]] 

このような項目を削除する最も簡単な方法は?可能であれば、forループを使用せずに作成したいと思います。

私は、次のコードを使用しようとしましたが、Aの大きさは各反復

for j in index: 
    del A[j] 

答えて

6

影響を受けていないおそらく最も機能的な(とPython的)な方法は、元のリストのそれらのインデックスにある要素を省略し、新しいリストを作成するには、次のようになります。

def remove_by_indices(iter, idxs): 
    return [e for i, e in enumerate(iter) if i not in idxs] 

実際にはhereをご覧ください。

+1

「i、e」の周りにカッコを入れる必要はありません。 –

2

私の単純なトリックを開始するために、エンドからそれらを削除することですので、位置に影響されますので、明らかにそれが動作しません。削除の

for j in sorted(index, reverse=True): 
    del A[j] 
1

は、新しいリストを作成するリスト内包とenumerateを使用します。

A = [['0 A B'],['1 C D'],['2 E F'],['3 G H'],['4 I L'],['5 M N'],['6 O P'],['7 Q R'],['8 S T'],['9 U Z']] 

print([element for index, element in enumerate(A) if index not in (0, 2, 6)]) 
>> [['1 C D'], ['3 G H'], ['4 I L'], ['5 M N'], ['7 Q R'], ['8 S T'], ['9 U Z']] 
3

それとも、あなたが望む性質を持つ新しいリストを作成するリストの内包表記を使用し、その後すぐに古いリストを交換してください。

A = [i for i in A if i[0] not in [0, 2, 6]] 
関連する問題