2013-02-27 2 views
0

튜플리스트가 있습니다. 튜플의 두 번째 및 세 번째 항목이 bananas1 인 목록의 모든 항목을 제거하고 싶습니다. for 루프는 반복 할 때 목록에서 항목을 제거하므로 작동하지 않습니다. 이것에 대해 어떻게 생각해?튜플의 값을 기반으로 목록에서 튜플을 삭제하는 방법은 무엇입니까?

my_table = [('apples', 'bananas', 1), ('pears', 'bananas', 1), ('grapes', 'apple', 2), ('apples,' 'pears', 2), ('apples', 'bananas', 2), ('grapes', 'bananas', 2)]

>>> printTable(my_table) 
('apples', 'bananas', 1) 
('pears', 'bananas', 1) 
('grapes', 'apple', 2) 
('apples,pears', 2) 
('apples', 'bananas', 2) 
('grapes', 'bananas', 2) 

>>> for item, row in enumerate(my_table): 
    if row[1] == 'bananas' and row[2] == 1: 
     print item, row 

0 ('pears', 'bananas', 1) 
5 ('apples', 'bananas', 1) 
6 ('grapes', 'bananas', 1) 

>>> for item, row in enumerate(my_table): 
    if row[1] == 'bananas' and row[2] == 1: 
     my_table.remove(row) 

>>> printTable(my_table) 
('pears', 'bananas', 1) 
('grapes', 'apple', 2) 
('apples,pears', 2) 
('apples', 'bananas', 2) 

답변

6

사용 대신에 지능형리스트 :

이 필터링 작업으로 삭제 본다
my_table = [elem for elem in my_table if elem[1:] != ('bananas', 1)] 

; 대신 새 목록을 만들어 삭제하면 안되는 모든 것을 보관하십시오.

+1

이 일을 정확하고 파이썬 방법입니다 * 새 * 목록을 생성 주목해야한다. 원래 목록은 변경되지 않았습니다. –

+0

@StevenRumbalski : 더 명확하게하기위한 답을 확장했습니다. –

0

당신도 할 수 있습니다

filterted_table=filter(lambda t: t[1:]!=('bananas', 1),my_table) 
관련 문제