2016-03-28 5 views
1

現在、52:3の次元を持つ2Dリストをフィルタリングしようとしています。私は行に基づいてリストをフィルタリングしたい。入力リストの特定のコンテンツを持つサブリストのリストをフィルタリングする

例行は、次のとおり

list = [[u'Kr', u'Se', ''],[u'Fe', '', ''],[u'Ca', '', '']] 

リストフィルタからの出力がローに存在する2つのスペースが(「」)が存在する場合である必要があります。その行を保持し、行を新しい変数に配置する必要があります。従って、出力例は次のようになります。

new = [[u'Fe', '', ''],[u'Ca', '', '']] 
+0

ねえ、あなたはそれが動作するようになりましたか?私の答えは助けになりましたか? – timgeb

答えて

0

いくつかのポインタ:あなたがリストに組み込まれて影になるので

は、変数名listを使用しないでください。

ここにリストのリストがあり、そのリストの一部に空白の文字列''が含まれています。空白ではなく、' 'となります。

言われて、あなたは、任意のサブリストxが含まれているどのように多くの空の文字列を数えることができ、そのカウントが2に等しい場合、リスト内包の助けを借りて、新しいリストにそれらを置くことを:

>>> lst = [[u'Kr', u'Se', ''],[u'Fe', '', ''],[u'Ca', '', '']] 
>>> result = [x for x in lst if x.count('') == 2] 
>>> result 
[[u'Fe', '', ''], [u'Ca', '', '']] 

(リスト内包であなたのリストのコピーを作成し、この動作が望ましくない場合

>>> result[0][0] = 'Xe' 
>>> result 
[['Xe', '', ''], [u'Ca', '', '']] 
>>> lst 
[[u'Kr', u'Se', ''], ['Xe', '', ''], [u'Ca', '', '']] 

:私たちはここに何をコピーしなかったので、サブリストへの変更は、彼らのためにすべての参照/名前渡って見られることに注意してください以前のexとの差のみ十分にx[:]代わりのx)の使用である:

>>> lst = [[u'Kr', u'Se', ''],[u'Fe', '', ''],[u'Ca', '', '']] 
>>> result = [x[:] for x in lst if x.count('') == 2] 
>>> result 
[[u'Fe', '', ''], [u'Ca', '', '']] 
>>> result[0][0] = 'Xe' 
>>> result 
[['Xe', '', ''], [u'Ca', '', '']] 
>>> lst 
[[u'Kr', u'Se', ''], [u'Fe', '', ''], [u'Ca', '', '']] 
関連する問題