如何根据元组中的值删除列表中的元组?

时间:2013-02-27 15:04:45

标签: python list tuples

我有一个元组列表。我想删除列表中元组中第2和第3项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)

2 个答案:

答案 0 :(得分:7)

改为使用列表理解:

my_table = [elem for elem in my_table if elem[1:] != ('bananas', 1)]

这将删除视为过滤作业;通过创建新列表来保留不应删除的所有内容。

答案 1 :(得分:0)

你也可以这样做:

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