[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.목록 사본을 반복합니다.
목록 사본을 반복합니다.
for c in colors[:]: if c == 'green': colors.remove(c)
-
==============================
2.파이썬에서 가장 좋은 접근법은 listcomp에 새로운 목록을 만드는 것입니다. 예를 들어, listcomp에서 이전 목록의 [:]으로 설정하면됩니다.
파이썬에서 가장 좋은 접근법은 listcomp에 새로운 목록을 만드는 것입니다. 예를 들어, listcomp에서 이전 목록의 [:]으로 설정하면됩니다.
colors[:] = [c for c in colors if c != 'green']
어떤 대답은 시사하는 것처럼 색상이 아닙니다 - 그 이름 만 리바 인 딩하고 낡은 "몸"에 매달리기 만합니다. colors [:] = 모든 카운트에서 더 좋습니다. ;-).
-
==============================
3.당신은 필터 기능을 사용할 수 있습니다 :
당신은 필터 기능을 사용할 수 있습니다 :
>>> colors=['red', 'green', 'blue', 'purple'] >>> filter(lambda color: color != 'green', colors) ['red', 'blue', 'purple'] >>>
-
==============================
4.또는 당신도 이것을 할 수 있습니다.
또는 당신도 이것을 할 수 있습니다.
>>> colors = ['red', 'green', 'blue', 'purple'] >>> if colors.__contains__('green'): ... colors.remove('green')
from https://stackoverflow.com/questions/1352885/remove-elements-as-you-traverse-a-list-in-python by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] regex를 사용하여 중복 문자를 제거 하시겠습니까? (0) | 2018.11.10 |
---|---|
[PYTHON] 목록에서 50 개의 항목을 무작위로 선택하여 파일에 쓰십시오. (0) | 2018.11.10 |
[PYTHON] 파이썬 로깅 모듈에서 줄 바꿈을 억제하십시오. (0) | 2018.11.09 |
[PYTHON] 상관 행렬 찾기 (0) | 2018.11.09 |
[PYTHON] Paramiko : NAT 라우터 주변의 포트 포워딩 (0) | 2018.11.09 |