프로그래밍/Python

PYTHON(파이썬) 리스트에서 특정 값의 모든 위치 찾기

꿈꾸는 사람_Anthony 2020. 8. 26. 06:34
반응형

파이썬은 (liist).index(target_data)라는 기능을 통해서, 해당 값이 존재하는 인덱스 값을 찾을 수 있게 해준다.

이는 한가지 단점이 있는데 바로 리스트안의 해당 값이 여러번 존재한다면, 가장 작은 인덱스만을 반환하고 나머지는 알 수 없다는 것이다.

이를 해결해주는 간단한 함수를 작성하여 보았다.

이 함수는 주어진 리스트에서 타겟 값이 존재하는 모든 인덱스를 반환해준다.

def find_index(data, target):
  res = []
  lis = data
  while True:
    try:
      res.append(lis.index(target) + (res[-1]+1 if len(res)!=0 else 0))
      lis = data[res[-1]+1:]
    except:
      break     
  return res

 

사용 예시는 다음과 같다.

a = [1,7,2,3,7,5,3,7,1,2,3,7,7]
print(find_index(a,7))

#출력 : [1, 4, 7, 11, 12]

---2021-06-06 추가---

코드의 작동방식(알고리즘)에 대한 설명

* python의 삼항연산자, try-except, 리스트 슬라이싱에 관해서 따로 공부하신 후 설명 보시면 수월한 이해가 가능하실 것입니다.

target과 data는 변하지 않는 값으로 코드 라인(줄번호)에 따른 조사식으로 설정하지 않았습니다.

* data[4+1:]과 같이 초과 index가 리스트 슬라이싱으로 발생하게되면, []으로 대체됩니다.

 

반응형