Python 이 목록 을 옮 겨 다 닐 때 요 소 를 삭제 하 는 올 바른 방법

문제 설명
 이것 은 작업 중 에 만난 코드 입 니 다.원 리 는 아래 와 비슷 합 니 다.(특정한 요소 가 요구 에 부합 되 는 지 판단 하고 이 요 소 를 삭제 하 는 데 부합 되 지 않 으 며 마지막 으로 요구 에 부합 되 는 목록 을 얻 습 니 다)

a = [1,2,3,4,5,6,7,8]
for i in a:
  if i>5:
    pass
  else:
    a.remove(i)
  print(a)
실행 결과:

문제 분석
요 소 를 삭제 하면 전체 목록 의 요 소 는 앞으로 이동 하지만 i 는 처음부터 확인 되 었 고 계속 커지 기 때문에 원 하 는 결 과 를 얻 을 수 없습니다.
해결 방법
1.새 목록 을 옮 겨 다 니 며 작업 합 니 다.삭 제 는 원래 목록 에서 작업 합 니 다.

a = [1,2,3,4,5,6,7,8]
print(id(a)) 
print(id(a[:])) 
for i in a[:]:
  if i>5:
    pass
  else:
    a.remove(i)
  print(a)
print('-------------------------')
print(id(a))
실행 결과:

2.filter
내장 함수 filter()공식 문서 참조:https://docs.python.org/3/library/functions.html#filter

a = [1,2,3,4,5,6,7,8]
b = filter(lambda x: x>5,a)
print(list(b))
실행 결과:

3.리스트 분석

a = [1,2,3,4,5,6,7,8]
b = [i for i in a if i >5]
print(b)
실행 결과:

4.거꾸로 삭제
목록 이 항상'앞으로 이동'하기 때문에 거꾸로 옮 겨 다 닐 수 있 습 니 다.뒤의 요소 가 수정 되 더 라 도 옮 겨 다 니 는 요소 와 좌 표 는 변 하지 않 습 니 다.

a = [1,2,3,4,5,6,7,8]
print(id(a))
for i in range(len(a)-1,-1,-1):
  if a[i] > 5:
    pass
  else:
    a.remove(a[i])
print(id(a))
print('--------------------')
print(a)
실행 결과:

파 이 썬 이 목록 을 옮 겨 다 닐 때 요 소 를 삭제 하 는 올 바른 방법 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 이 목록 을 옮 겨 다 니 며 요 소 를 삭제 하 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 을 바 랍 니 다!

좋은 웹페이지 즐겨찾기