1

タプルのリストがあります。bananasタプルの 2 番目と 3 番目の項目がandであるリストのすべての項目を削除したいと思います1。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)
4

2 に答える 2

7

代わりにリスト内包表記を使用してください。

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

これは、削除をフィルタリング ジョブと見なします。代わりに新しいリストを作成して、削除してはならないものをすべて保持します。

于 2013-02-27T15:05:40.573 に答える
0

次のこともできます。

filterted_table=filter(lambda t: t[1:]!=('bananas', 1),my_table)
于 2013-02-27T15:21:01.957 に答える