복붙노트

[PYTHON] 파이썬에서 목록을 순회하면서 요소를 제거하십시오 [duplicate]

PYTHON

파이썬에서 목록을 순회하면서 요소를 제거하십시오 [duplicate]

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]
*/

파이썬에서 어떻게하면 좋을까요? for 루프에서 반복하는 동안 목록을 수정할 수 없으므로 물건을 건너 뛸 수 있습니다 (여기 참조). 그리고 Java의 Iterator 인터페이스와 동일한 것 같지 않습니다.

해결법

  1. ==============================

    1.목록 사본을 반복합니다.

    목록 사본을 반복합니다.

    for c in colors[:]:
        if c == 'green':
            colors.remove(c)
    
  2. ==============================

    2.파이썬에서 가장 좋은 접근법은 listcomp에 새로운 목록을 만드는 것입니다. 예를 들어, listcomp에서 이전 목록의 [:]으로 설정하면됩니다.

    파이썬에서 가장 좋은 접근법은 listcomp에 새로운 목록을 만드는 것입니다. 예를 들어, listcomp에서 이전 목록의 [:]으로 설정하면됩니다.

    colors[:] = [c for c in colors if c != 'green']
    

    어떤 대답은 시사하는 것처럼 색상이 아닙니다 - 그 이름 만 리바 인 딩하고 낡은 "몸"에 매달리기 만합니다. colors [:] = 모든 카운트에서 더 좋습니다. ;-).

  3. ==============================

    3.당신은 필터 기능을 사용할 수 있습니다 :

    당신은 필터 기능을 사용할 수 있습니다 :

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

    4.또는 당신도 이것을 할 수 있습니다.

    또는 당신도 이것을 할 수 있습니다.

    >>> colors = ['red', 'green', 'blue', 'purple']
    >>> if colors.__contains__('green'):
    ...     colors.remove('green')
    
  5. from https://stackoverflow.com/questions/1352885/remove-elements-as-you-traverse-a-list-in-python by cc-by-sa and MIT license