2016-10-28 2 views
1

트랜잭션을 설명하는 튜플 목록에서 day1과 day2 사이의 모든 트랜잭션을 제거하려고합니다. 거래에는 금액, 하루 및 유형이 있습니다. 이걸 실행하면 오류가 발생합니다.TypeError를 해결할 수 없습니다. 'int'객체가 subscriptable이 아닙니다.

"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

''Day ']''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)과 같이 호출해야합니다.

더 많은 코드이지만 다른 곳에서 결과가 필요하고 트랜잭션 목록을 변경하지 않으려는 경우이 함수를 사용할 수 있으므로 이점이 있습니다. 또한 목록 이해력은 종종 더 명확합니다.

관련 문제