2017-03-31 17 views
-1

連続イベントのインデックスを、その値に基づいてイベントのリストからグループ化しようとしています。Pythonでリストのリストに追加するときに上書きする

しかし、events_listリストに追加できないエラーが私のコードにあります。 私のコードを追加すると、以前に追加された項目の値が上書きされます。

最後のprintステートメントは、[[0,1,2,3,4]、[7]]の代わりに[[24]、[24]、[24]、[24] 、[8,9]、[10,11,12]、[16、17、18、19、20、21]、[24]あなたがcurrent_eventために同じ参照を再利用している

single_events = [1,1,1,1,1,0,0,-1,1,1,-1,-1,-1,0,0,0,-1,-1,-1,-1,-1,-1,0,0,1] 

events_list = [] 
current_event = [] 


for i, event in enumerate(single_events): 
    print('\nRecord: ', i, ',\tEvent Type: ', event) 
    if (current_event == []) and (event != 0): 
     current_event.append(i) 
     print('Current Event: ', current_event) 

    elif (current_event == []) and (acc == 0): 
     pass  

    elif (current_event != []) and (event == single_events[current_event[-1]]): 
     current_event.append(i) 
     print('Current Event: ', current_event) 

    elif (current_event != []) and (event != single_events[current_event[-1]]): 
     print('Event to be appended: ', current_event) 
     events_list.append(current_event) 
     print('\nNEW EVENT LIST!!!: ', events_list) 
     current_event[:] = [] 
     if event == 0: 
      pass 
     else: 
      current_event.append(i) 
     print('Current Event: ', current_event)   


print('\n', events_list) 

答えて

1

すべての反復。

こと:

current_event[:] = [] 

は、リストを空にしますが、同じ参照を保持します。あなたはこのように、以前に保存されたリストを変更することを避けるために、新たな基準を作成する必要があります。

current_event = [] 

だけ変更することで、私が取得すること:[[0, 1, 2, 3, 4], [7], [8, 9], [10, 11, 12], [16, 17, 18, 19, 20, 21]]

脇結果:elif (current_event == []) and (acc == 0):のような条件が良いように書き換えることができます。 :

elif not current_event and acc==0: 

空のリストは、「Falsy」、空にするために比較する必要はありませんとみなす(accために同じことをしますが、0に比較することは明確である)されます。

関連する問題