Python でリストをトラバースするときに要素を削除する [重複]
-
20-09-2019 - |
質問
この質問にはすでに答えがあります:
- 反復中にリストから項目を削除するにはどうすればよいですか? 26 件の回答
Javaでは、を使用して行うことができます Iterator
そして、それを使用して、 .remove()
次のように、イテレータのメソッドを使用して、イテレータによって返された最後の要素を削除します。
import java.util.*;
public class ConcurrentMod {
public static void main(String[] args) {
List<String> colors = new ArrayList<String>(Arrays.asList("red", "green", "blue", "purple"));
for (Iterator<String> it = colors.iterator(); it.hasNext(); ) {
String color = it.next();
System.out.println(color);
if (color.equals("green"))
it.remove();
}
System.out.println("At the end, colors = " + colors);
}
}
/* Outputs:
red
green
blue
purple
At the end, colors = [red, blue, purple]
*/
Python でこれを行うにはどうすればよいでしょうか?for ループでリストを反復処理している間は、リストがスキップされるため、リストを変更できません (「 ここ)。そして、それに相当するものはないようです Iterator
Javaのインターフェース。
解決
を反復処理します コピー リストの:
for c in colors[:]:
if c == 'green':
colors.remove(c)
他のヒント
はPythonのベストアプローチは古いもの、例えばの[:]
として設定する、理想的listcompに、新しいリストを作ることです:ます。
colors[:] = [c for c in colors if c != 'green']
いくつかの答えを提案することができるようcolors =
ません - 名前のみを再バインドし、最終的に古い「身体」ダングリングにいくつかの参照を残すこと。 colors[:] =
はすべてカウントにはるかに優れている; - )
あなたはフィルタ機能を使用することができます:
>>> colors=['red', 'green', 'blue', 'purple']
>>> filter(lambda color: color != 'green', colors)
['red', 'blue', 'purple']
>>>
のか、また、このように行うことができます。の
>>> colors = ['red', 'green', 'blue', 'purple']
>>> if colors.__contains__('green'):
... colors.remove('green')
所属していません StackOverflow