0

そのため、ネストされたリストに大量のデータが格納されています。ネストされたリストには多くのサブリストがありますが、次の一般的な形式を取ります。

nested_list = [[[ID#, Magnitude, Magnitude Error],[ID#, Magnitude, Magnitude Error]], 
               [[ID#, Magnitude, Magnitude Error],[ID#, Magnitude, Magnitude Error]]]

ID#、Magnitude、Magnitude Error はすべて float です。共通 ID 番号のリストもあります。私がやりたいことは、ID 番号の共通セットにない ID# でタグ付けされた要素を削除することです。この時点では、基本的に ID 番号のみが重要です。以下のネストされたリストとデータを使用してコードを試しました。

nested_list = [[[1.0, 17.634, 0.025], [4.0,  15.633, 0.015], [8.0,  14.097, 0.023],
                [9.0, 15.134, 0.018], [10.0, 15.247, 0.015]],
               [[4.0, 19.634, 0.025], [8.0,  10.097, 0.023], [10.0, 15.247, 0.015]],
               [[4.0, 13.633, 0.015], [8.0,  12.097, 0.023], [9.0,  15.134, 0.018]]]
common_values = [4.0,8.0] 

共通の ID 番号の 1 つを含まない要素を捨てようとしていました。したがって、返されるものは次のようになります。

final_nested_list = [[[[4.0, 15.633, 0.015],[8.0, 14.097, 0.023]],[[4.0, 19.634, 0.025],
                    [8.0, 10.097, 0.023]], [[4.0, 13.633, 0.015],[8.0, 12.097, 0.023]]]

ID 番号を含む最初の要素だけを反復処理する方法を見つけようとして、問題が発生しました。

4

2 に答える 2

1

ネストされたリスト内包表記を使用できます。

>>> [[y for y in x if y[0] in common_values] for x in nested_list]
[[[4.0, 15.633, 0.015], [8.0, 14.097, 0.023]], [[4.0, 19.634, 0.025], [8.0, 10.097, 0.023]], [[4.0, 13.633, 0.015], [8.0, 12.097, 0.023]]]

リストが巨大な場合は、セットがルックアップcommon_valuesを提供するため、最初にセットに変換することをお勧めします。O(1)

上記のリスト内包表記は、次とほぼ同等です。

>>> out_put = []
for x in nested_list:
   temp = []
   for y in x:
       if y[0] in common_values: #check if first item is present in common_keys
           temp.append(y)
   out_put.append(temp)
...    
>>> out_put
[[[4.0, 15.633, 0.015], [8.0, 14.097, 0.023]], [[4.0, 19.634, 0.025], [8.0, 10.097, 0.023]], [[4.0, 13.633, 0.015], [8.0, 12.097, 0.023]]]
于 2013-06-27T19:49:48.183 に答える
1

こんにちは、次の 2 つの方法のいずれかを提案できます。

任意の関数を使用して、ネストされたリストに共通の値が存在するかどうかを確認します

[[i for i in nl if any(j in i for j in common_values)] for nl in nested_list]

集合の交点を見つけようとする

cv_set = set(common_values)
[[i for i in nl if set(i) & cv_set] for nl in nested_list]

短い方法を使用して結果を評価するため、最初の方が望ましいです(最初の真のステートメントまで)

于 2013-06-27T20:02:39.337 に答える