2

リストをトラバースするときに要素を削除する方法でこれを読みました: Python でリストをトラバースするときに要素を削除する

これを例として使用します。

>>> colors=['red', 'green', 'blue', 'purple']
>>> filter(lambda color: color != 'green', colors)
['red', 'blue', 'purple']

しかし、それが文字列の一部である場合、要素を削除したい場合はどうすればよいですか? つまり、「een」のみを入力した場合に「緑」をフィルタリングしたい (色の「緑」文字列要素の一部だけですか?

4

2 に答える 2

5

を使用する代わりに、リスト内包filter()表記を使用します。

>>> colors = ['red', 'green', 'blue', 'purple']
>>> [color for color in colors if 'een' not in color]
['red', 'blue', 'purple']

または、引き続き使用する場合は、次のようにしますfilter()

>>> filter(lambda color: 'een' not in color, colors)
['red', 'blue', 'purple']
于 2013-08-04T06:15:28.180 に答える
3

リスト内包表記は、このループの短いバージョンです。

new_list = []
for i in colors:
   if 'een' not in i:
       new_list.append(i)

リスト内包表記と同等のものは次のとおりです。

new_list = [i for i in colors if 'een' not in i]

次のように、フィルターの例を使用することもできます。

>>> filter(lambda x: 'een' not in x, colors)
['red', 'blue', 'purple']

これは元のcolorsリストを変更しないことに注意してください。フィルターに一致するアイテムのみを含む新しいリストが返されるだけです。元のリストを変更する一致する項目を削除できますが、連続した一致の問題を回避するために、最後から開始する必要があります。

for i in colors[::-1]: # Traverse the list backward to avoid skipping the next entry.
    if 'een' in i:
       colors.remove(i)
于 2013-08-04T06:27:28.377 に答える