2017-06-25 5 views
1

こんにちは私はPython 2.7で2つの別々のリストを結合するスクリプトを作成しています。 (より良い説明のために例を見てください)。 のは、私は、ソースデータセットからの二つのリストを抽出していると仮定しよう:2つのリストから新しいリストを作成する - 有効な対応する値のみを受け入れるようにする

  • リスト1 - パラメータを指定して(たとえば年)
  • リスト2 - パラメータの値

とただし、すべてのパラメータが持っていますリスト2の値(欠損データ)。タスクは、完全なデータ(ペア)のみに基づいてグラフをプロットできるようにする2つのリストを作成することです。

現在、私はうまく動作する以下のスクリプトを使用しています。

私の質問:これを行う簡単な方法はありますか?

特に、データが欠落しているリストが2つある場合、この方法は管理するのがますます困難になります。または、抽出されたリストが空の文字列 ""の代わりにNaNを持つ場合

アイデア、ライブラリはありますか?

list1 = [2000,2001,2002,2003,2004,2005,2006,2007] 
list2 = [0,1,2,3,"",5,"",7] 

list1_reduced = [] 
list2_reduced = [] 

i=0 
for element in list2: 
    if element != "": 
     list1_reduced.append(list1[i]) 
     list2_reduced.append(list2[i]) 
    i += 1 

print list1_reduced 
print list2_reduced 

結果:

[2000, 2001, 2002, 2003, 2005, 2007] 
[0, 1, 2, 3, 5, 7] 

私は、Python 2.7(アナコンダ)、スパイダーIDEを使用して、Windowsの10

非常に感謝すべてのヘルプ。

ありがとうございました! isinstance(y, int)代わりのy != ''

+0

あなたが質問マークしてください最善の答え;) – glegoux

答えて

2
list1 = [2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007] 
list2 = [0, 1, 2, 3, "", 5, "", 7] 

list1, list2 = [list(z) for z in 
        zip(*[(x, y) for (x, y) in 
          zip(list1, list2) if y != ''])] 

print(list1) 
print(list2) 

結果:

[2000, 2001, 2002, 2003, 2005, 2007] 
[0, 1, 2, 3, 5, 7] 
+0

かなりクール(+1)。ただ一つの後退:両方のリストはリストではなくタプルに変わります。 –

+0

@ÉbeIsaac今それはリストです – glegoux

+0

@glegoux素敵な仕事!それはうまく動作します。以前はzip()関数で試してみましたが、論理テストを実行する方法が見つかりませんでした。ありがとう! – Roberto

0

ここでは、代替テストは、タイプをテストされて

[(x, y) for (x, y) in zip(list1, list2) if y != ''] 

を行くは整数です。

0

これは実行可能なソリューションでなければなりません:縮小リストの

list1 = [2000,2001,2002,2003,2004,2005,2006,2007] 
list2 = [0,1,2,3,"",5,"",7] 

reducedIndexes = [i for i,x in enumerate(list2) if x != ''] 

list1_reduced = [list1[i] for i in reducedIndexes] 
list2_reduced = [list2[i] for i in reducedIndexes] 

内容:択一で解決として

[2000, 2001, 2002, 2003, 2005, 2007] 
[0, 1, 2, 3, 5, 7] 
関連する問題