2

次のようなアイテムのリストがあります。

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]

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

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]
4

4 に答える 4

7

おそらく最も機能的な (そして Pythonic な) 方法は、元のリストのインデックスにある要素を省略して、新しいリストを作成することです。

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

実際の動作はこちらでご覧ください。

于 2016-11-21T14:10:18.760 に答える
3

または、リスト内包表記を使用して、必要なプロパティを持つ新しいリストを作成し、すぐに古いリストを置き換えます。

A = [i for i in A if i[0] not in [0, 2, 6]]
于 2016-11-21T14:11:18.560 に答える
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']]
于 2016-11-21T14:10:41.800 に答える