[알고리즘] - 선형배열(리스트 내 해당 원소의 인덱스 반환)

2020. 12. 30. 20:28·Algorithms 💻
반응형
✔ 주안점
index의 중복처리 반환(존재하는 모든 원소의 인덱스를 반환해야 했던 것)

💻 부끄러운 나의 코드

def solution(L, x):
    answer = []
    
    if x in L:
        for i in range(len(L)):
            a = L[i]
            if x == a:
                if i< len(L):
                    answer.append(L.index(a, i))  
                else:
                    answer.append(L.index(a, i-1)) 
                # 인덱스에 집착하다보니 index method를 이용할 수밖에 없었음. ...
                # 그 결과.. 비효율적인 코드 완성됨..
                
            else:
                pass
    else:
        answer.append(-1)

    return answer

✔ 문제점
- 또 비슷하게 if/else 식의 코드 진행.... 으... 극혐....
- index에 집착하다보니 index함수를 이용하려고 했고, 그 결과 비효율적인 코드가 완성됨
(마지막 인덱스를 따로 처리하긴했지만 if/else식이 너무 김)

∵ index(a, i) : i번째 위치부터 a문자가 위치한 자리 반환

✔ 다른 풀이 참고

1. index 함수 사용하지 않기

def solution(L, x):
    idx = []
    for i in range(len(L)):
        if L[i] == x:
            idx.append(i)
            
    if len(idx) == 0 : # 아무것도 안들어가 있을 때.....
        idx.append(-1)
        
    return idx

index함수를 이용하지 않고도, 그냥 for문의 i를 append하면 index가 됨. 이 i를 append하면 인덱스가 담긴 list가 되는 것이다..... index함수를 괜히 이용하려고 했다가 함수만 복잡해진다. i가 인덱스의 역할도 함을 기억하자. 

x가 L에 존재하냐를 묻는 if, else문은 여기서는 존재할 필요가 없다. for문으로 우선 훑고 따로 빼 단독 if문으로만 예외를 처리해주면 된다. 


2. enumerate 사용하기

def solution(L, x):
    if x in L:
        return [i for i, j in enumerate(L) if j==x]
    else:
        return [-1]

enumerate를 이용해 index를 첫번째 인자로 가져온다. index를 가져오는 방식이 for문 말고 enumerate도 있다. 
포함관계를 확인은 없어도 될 것 같다.


cf) for문과 if를 한줄로 표현해서 리스트로 만드는 방식. 이전 포스팅에서 봤던 방식이다. 

# 원래
for i in v:
	if i==12:
    	print(i)

# 한줄로 코딩
[i for i in v if i==12]



반응형
저작자표시 (새창열림)

'Algorithms 💻' 카테고리의 다른 글

자주 쓰이는 기본적인 정규표현식(Regex) 정리  (0) 2021.04.19
[Project Euler] Problem 1 ~ 7번 알고리즘 풀이  (0) 2021.02.24
[알고리즘] - 선형배열 (정렬된 리스트에 원소 삽입하기)  (0) 2020.12.30
'Algorithms 💻' 카테고리의 다른 글
  • 자주 쓰이는 기본적인 정규표현식(Regex) 정리
  • [Project Euler] Problem 1 ~ 7번 알고리즘 풀이
  • [알고리즘] - 선형배열 (정렬된 리스트에 원소 삽입하기)
당니이
당니이
씩씩하게 공부하기 📚💻
  • 당니이
    다은이의 컴퓨터 공부
    당니이
  • 전체
    오늘
    어제
    • 분류 전체보기 (136)
      • Achieved 👩🏻 (14)
        • 생각들 (2)
        • TIL (6)
        • Trial and Error (1)
        • Inspiration ✨ (0)
        • 미국 박사 준비 🎓 (1)
      • Computer Vision💖 (39)
        • Basic (9)
        • Video (5)
        • Continual Learning (7)
        • Generative model (2)
        • Domain (DA & DG) (5)
        • Multimodal (8)
        • Multitask Learning (1)
        • Segmentation (1)
        • Colorization (1)
      • RL 🤖 (1)
      • Autonomous Driving 🚙 (11)
        • Geometry (4)
        • LiDAR 3D Detection (1)
        • Trajectory prediction (2)
        • Lane Detection (1)
        • HDmap (3)
      • Linux (15)
      • PyTorch👩🏻‍💻 (10)
      • Linear Algebra (2)
      • Python (5)
      • NLP (10)
        • Article 📑 (1)
      • Algorithms 💻 (22)
        • Basic (8)
        • BAEKJOON (8)
        • Programmers (2)
      • ML (1)
        • 통계적 머신러닝(20-2) (1)
      • SQL (3)
      • 기초금융 💵 (1)
  • 블로그 메뉴

    • 홈
    • About me
  • 링크

    • 나의 소박한 github
    • Naver 블로그
  • 공지사항

  • 인기 글

  • 태그

    리눅스
    코딩테스트
    conda
    dfs
    til
    백트래킹
    Python
    자료구조
    Incremental Learning
    CV
    CL
    domain generalization
    pytorch
    Linux
    LLM
    NLP
    백준
    domain adaptation
    continual learning
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
당니이
[알고리즘] - 선형배열(리스트 내 해당 원소의 인덱스 반환)
상단으로

티스토리툴바