2017-11-06 11 views
-3

同じ長さのリストが2つあります:aとbです。リストbには、同じインデックスのリストaと同じ浮動小数点数がいくつか含まれますが、他のインデックスはゼロで置き換えられます。これらのリストには、それぞれ数千の値も含まれています。複数のリストを反復して比較する

これは、ゼロ以外の値になるまでリストbを繰り返していき、大きな値に達するまで同じインデックスからリストaを反復します。私はその後、大きな値を空のリストに追加して、リストbを次の非ゼロ値まで反復して繰り返していきたいと思います。

c=[] 
i = 0 
j = 0 
while i < len(a): 
    if b[i] == 0: 
     i = i + 1 
    if b[i] > 0: 
     j = i 
    if a[j] < b[i]: 
     j = j + 1 
    if a[j] == b[i]: 
     j = j + 1 
    if a[j] > b[i]: 
     c.append(a[j]) 
     i = i + 1 

は私がのためにこれを行うための複数の方法を試してみましたし、ループはどちらかだけの空のリストにリストAの全体を追加終わるながら、またはループしながら、私は無限を作成するので、どのように任意のヘルプやアドバイス始めるには大いに感謝します!

これに@ MichaelButscherの答えを組み込み、リストaとbの値に対応する日付を含む別のリストdを追加すると、条件if a[j] > b[i]:を満たす値の日付が新しいリストeに追加されました。

d=['05/01/2000','06/01/2000','07/01/2000','10/01/2000','11/01/2000','12/01/2000','23/10/2000','24/10/2000','25/10/2000','13/12/2000','14/12/2000','15/12/2000','20/02/2001','21/02/2001','21/09/2001','19/06/2002','20/06/2002'] 
a=[1.86,1.85,1.89,1.82,1.82,1.83,1.846,1.898,1.869,1.923,1.926,1.9677,1.959,2.02,2.802,2.7312,2.8035] 
b=[0,0,1.89,0,0,0,0,0,0,0,0,1.9677,0,0,2.802,0,0] 

c=[] 
e=[] 
i = 0 
j = 0 

# Run until break 
while True: 
    while i < len(a): 
     if b[i] != 0: 
      break # break inner while 
     i += 1 
    else: 
     break # break outer while 

    # At this point: i < len(a) and b[i] != 0 

    j = i 
    while j < len(a): 
     if a[j] > b[i]: 
      # At this point: i < len(a) and b[i] != 0 and j < len(a) and a[j] > b[i] 
      c.append(a[j]) 
      e.append(d[j]) 
      break 
     j += 1 

    # At this point either appropriate j was found or j == len(a) 
    # Anyway, next i to check 

    i += 1 

リストのCとEは、その後の列に印刷された:

24/10/2000 1.898 
24/10/2000 1.898 
21/02/2001 2.02  
10/09/2001 2.606 
20/06/2002 2.8035 
24/09/2002 3.8132 
22/09/2015 4.0667 
04/09/2015 3.853 
01/09/2015 3.7031 
10/05/2004 3.148 

データの一部が繰り返され、リストdの日付であったにもかかわらず、昇順日付順ではありません。

+3

は、あなたがすでにやっていることと、特にうまくいかないものを表示します。 –

+0

@MichaelButscher私は無限のwhileループで終わる試みられたコードでそれを更新しました。 –

答えて

0

ループを入れ子にすることでこれを行うことができます。外側は永遠に(中断するまで)実行され、内側のループは目的の状態をチェックします。

未テスト

が、動作するはずです:

c=[] 
i = 0 
j = 0 

# Run until break 
while True: 
    while i < len(a): 
     if b[i] != 0: 
      break # break inner while 
     i += 1 
    else: 
     break # break outer while 

    # At this point: i < len(a) and b[i] != 0 

    j = i 
    while j < len(a): 
     if a[j] > b[i]: 
      # At this point: i < len(a) and b[i] != 0 and j < len(a) and a[j] > b[i] 
      c.append(a[j]) 
      break 
     j += 1 

    # At this point either appropriate j was found or j == len(a) 
    # Anyway, next i to check 

    i += 1 
+0

すぐに応答していただきありがとうございます!私はちょうどそれをテストして、aの値が何らかの理由で順番にcに追加されていません。また、一部の値が重複しています。 –

+0

@FreddieLambert問題を示す小さなテストデータセットを作成できますか? –

+0

主な質問を編集してデータセットを追加しました。また、各データポイントが記録された日付も含まれます。 –

関連する問題