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

1 投票
2 回答
595 浏览
提问于 2025-04-17 17:19

我有一个包含元组的列表。我想要删除列表中所有第二和第三个元素分别是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

你还可以这样做:

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

用列表推导式来代替:

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

这里把删除看作是一个筛选的工作;通过创建一个新列表,保留那些不需要删除的东西。

撰写回答