2012-11-06 20 views
9

Pythonでは、リストのリストから「列」を削除するにはどうすればよいですか?
は考える:Pythonでは、リストのリスト(列の削除)からN番目のリスト項目を削除するにはどうすればよいですか?

L = [ 
    ["a","b","C","d"], 
    [ 1, 2, 3, 4 ], 
    ["w","x","y","z"] 
    ] 

を私が取得する "列" 2を削除したいと思います:

L = [ 
    ["a","b","d"], 
    [ 1, 2, 4 ], 
    ["w","x","z"] 
    ] 

はそれを行いますスライスまたはデル方法はありますか?次のようなものがあります。

del L[:][2] 

答えて

7

ループする可能性があります。

for x in L: 
    del x[2] 

大量のデータを扱う場合は、そのような洗練されたスライシングをサポートするライブラリを使用できます。しかし、単純なリストのリストはスライスされません。

6

このリストを繰り返して、削除するインデックスを削除してください。

新しいリストを作成する上で気にしないならば、あなたは次のことを試すことができ

for sublist in list: 
    del sublist[index] 
+0

これは最高です –

+0

この解決策は遅いです – user3085931

+0

このProbのベストソリューションが何であるか教えてください:) – Myjab

0

例えば:

filter_col = lambda lVals, iCol: [[x for i,x in enumerate(row) if i!=iCol] for row in lVals] 

filter_out(L, 2) 
0

これは、あなたが好きな列削除する非常に簡単な方法です。

L = [ 
["a","b","C","d"], 
[ 1, 2, 3, 4 ], 
["w","x","y","z"] 
] 
temp = [[x[0],x[1],x[3]] for x in L] #x[column that you do not want to remove] 
print temp 
O/P->[['a', 'b', 'd'], [1, 2, 4], ['w', 'x', 'z']] 
3

A少しねじれたバージョン -

index = 2 #Delete column 2 
[ (x[0:index] + x[index+1:]) for x in L] 
0
[(x[0], x[1], x[3]) for x in L] 

それは正常に動作します。

1
 L= [['a', 'b', 'C', 'd'], [1, 2, 3, 4], ['w', 'x', 'y', 'z']] 

     _=[i.remove(i[2])for i in L] 
+0

副作用のためにlistcompを使用することは一般的に不快ですが、削除しようとしている要素がリスト内の最初のものでなければ機能しません。たとえば、サブリストの1つが[1,2,1,3]の場合、 'remove'は' [1,2,3] 'ではなく' [2,1,3] 'を返します。 – DSM

2

あなたはリスト内包でそれを行うことができます。

>>> removed = [ l.pop(2) for l in L ] 
>>> print L 
[['a', 'b', 'd'], [1, 2, 4], ['w', 'x', 'z']] 
>>> print removed 
['d', 4, 'z'] 

それはリストをループし、あなたが要素のリストを取り出し、メインリストを持っている位置に2

をすべての要素をポップこれらの要素はありません。

関連する問題