2016-10-28 19 views
1

トランザクションを記述するタプルのリストでday1とday2の間のトランザクションをすべて削除します。取引には金額、1日および1つのタイプがあります。私がこれを実行するとエラーが発生しますTypeErrorを解決できません: 'int'オブジェクトはサブスクリプトではありません

"TypeError: 'int' object is not subscriptable" on row 4.

誰か私を助けることができますか?

def delete_periodoftime(transactions, day1, day2): 
    for i,transaction in enumerate(transactions): 
     if i['Day']<=day1 or i['Day']<=day2: 
      transactions.remove(i) 
+2

'i ''日 '' 'i'はあなたのアイテムではなく、おそらく' transaction [' Day '] ' – MooingRawr

+4

です。反復するリストからも削除しないでください。 – polku

+0

ああ、試してみましょう。 –

答えて

0

この取引を当日までにフィルタリングしようとしているようです。それを行うもう一つの良い方法はリストの理解です。

def delete_periodoftime(transactions, day1, day2): 
    return [t for t in transactions if t['Day'] <= day1 or t['Day'] <= day2] 

これと現在のコードの違いは、関数に渡されたものを変更する代わりに、新しいリストを作成して返すことです。

したがって、delete_periodoftime(my_transactions, my_day1, my_day2)のような関数を呼び出す場合は、my_transactions = delete_periodoftime(my_transactions, my_day1, my_day2)のように呼び出す必要があります。

これはコードが多いですが、結果が必要なときにこの機能を使用でき、トランザクションリストを変更したくない場合に便利です。さらに、リストの理解はしばしばより明確です。

関連する問題