[파이썬 언어] 리스트를 모두 방문(조합, 선택)하는 방법 - 함수 스택 사용 - Whitmem
[파이썬 언어] 리스트를 모두 방문(조합, 선택)하는 방법 - 함수 스택 사용
Python Programming
2023-06-13 03:29 게시 1cc355941e26865e19c5

0
0
68
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
기본적으로 리스트가 존재할 때, 해당 리스트의 데이터를 모두 뽑는 경우의 수를 구하기 위해서는 하나씩 뽑아 봐야 합니다. 예를 들어, items=["안","녕","하","세","요"]; 의 데이터가 있다고 가정할 때, 하나씩 뽑는다면, ["안"] ["안","녕"] ["안","하"] ... 와 같이 무수히 많습니다. 이를 일반적인 for문을 고정하여 하드 코딩 하는 방식으로는 해결하기 쉽지 않습니다. 리스트의 개수가 무조건적으로 고정되어 있으면 해당 개수만큼 for문을 중첩하여 번갈아가며 계산하면 되지만, 리스트 개수가 가변인 경우는 해당 개수만큼 반복을 중첩해야 하기 때문입니다.
조합 - 재귀함수의 사용
따라서 보통 이러한 경우는 재귀 함수를 사용하게 됩니다. 하나의 원소를 가지고 있는 상태에서 현재 상태에서 하나씩 추가로 선택하고, 다시 자기 자신을 호출하여 끝까지 도달하는 방법입니다.
재귀 함수
def process(items,latestItems,startIndex): if(startIndex!=-1): latestItems.append(items[startIndex]); print("방문 결과 : %s"%(latestItems)); for i in range(startIndex+1,len(items)): process(items,latestItems.copy(),i); items=["안","녕","하","세","요"]; results=[]; process(items,[],-1); print(results);
이 방법을 사용하게 되면 해당 리스트에 있는 데이터들을 가능한 모든 조합을 활용하여 순서와 상관 없이 꺼낼 수 있게 됩니다.
출력 결과
방문 결과 : ['안'] 방문 결과 : ['안', '녕'] 방문 결과 : ['안', '녕', '하'] 방문 결과 : ['안', '녕', '하', '세'] 방문 결과 : ['안', '녕', '하', '세', '요'] 방문 결과 : ['안', '녕', '하', '요'] 방문 결과 : ['안', '녕', '세'] 방문 결과 : ['안', '녕', '세', '요'] 방문 결과 : ['안', '녕', '요'] 방문 결과 : ['안', '하'] 방문 결과 : ['안', '하', '세'] 방문 결과 : ['안', '하', '세', '요'] 방문 결과 : ['안', '하', '요'] 방문 결과 : ['안', '세'] 방문 결과 : ['안', '세', '요'] 방문 결과 : ['안', '요'] 방문 결과 : ['녕'] 방문 결과 : ['녕', '하'] 방문 결과 : ['녕', '하', '세'] 방문 결과 : ['녕', '하', '세', '요'] 방문 결과 : ['녕', '하', '요'] 방문 결과 : ['녕', '세'] 방문 결과 : ['녕', '세', '요'] 방문 결과 : ['녕', '요'] 방문 결과 : ['하'] 방문 결과 : ['하', '세'] 방문 결과 : ['하', '세', '요'] 방문 결과 : ['하', '요'] 방문 결과 : ['세'] 방문 결과 : ['세', '요'] 방문 결과 : ['요']
순서까지 포함한 모든 경우의 수
위 예시는 순서는 제외하여 조합을 모두 뽑았습니다만, 순서까지 고려해야 하는 경우는 어떻게 해야할까요? 이번에는 원본 데이터를 하나씩 제거한 리스트를 복사하면서 다음 재귀 함수로 넘겨줄 수 있겟습니다. 결국 하나씩 없애다보면 끝에 도달하는 위치가 있을 것이고, 끝에 도달하면 다시 전 단계로 돌아가서 다음 원소를 찾게 될 것 입니다.
순서 적용 재귀 함수
count=0; def process(items,latestItems,startIndex): global count; if(startIndex!=-1): latestItems.append(items[startIndex]); print("방문 결과 : %s"%(latestItems)); count+=1; del items[startIndex]; for i in range(0,len(items)): process(items.copy(),latestItems.copy(),i); items=["안","녕","하","세","요"]; process(items,[],-1); print(count);
출력 결과
방문 결과 : ['안'] 방문 결과 : ['안', '녕'] 방문 결과 : ['안', '녕', '하'] 방문 결과 : ['안', '녕', '하', '세'] 방문 결과 : ['안', '녕', '하', '세', '요'] 방문 결과 : ['안', '녕', '하', '요'] 방문 결과 : ['안', '녕', '하', '요', '세'] 방문 결과 : ['안', '녕', '세'] 방문 결과 : ['안', '녕', '세', '하'] 방문 결과 : ['안', '녕', '세', '하', '요'] 방문 결과 : ['안', '녕', '세', '요'] 방문 결과 : ['안', '녕', '세', '요', '하'] 방문 결과 : ['안', '녕', '요'] 방문 결과 : ['안', '녕', '요', '하'] 방문 결과 : ['안', '녕', '요', '하', '세'] 방문 결과 : ['안', '녕', '요', '세'] 방문 결과 : ['안', '녕', '요', '세', '하'] 방문 결과 : ['안', '하'] 방문 결과 : ['안', '하', '녕'] 방문 결과 : ['안', '하', '녕', '세'] 방문 결과 : ['안', '하', '녕', '세', '요'] 방문 결과 : ['안', '하', '녕', '요'] 방문 결과 : ['안', '하', '녕', '요', '세'] 방문 결과 : ['안', '하', '세'] 방문 결과 : ['안', '하', '세', '녕'] 방문 결과 : ['안', '하', '세', '녕', '요'] 방문 결과 : ['안', '하', '세', '요'] 방문 결과 : ['안', '하', '세', '요', '녕'] 방문 결과 : ['안', '하', '요'] 방문 결과 : ['안', '하', '요', '녕'] 방문 결과 : ['안', '하', '요', '녕', '세'] 방문 결과 : ['안', '하', '요', '세'] 방문 결과 : ['안', '하', '요', '세', '녕'] 방문 결과 : ['안', '세'] 방문 결과 : ['안', '세', '녕'] 방문 결과 : ['안', '세', '녕', '하'] 방문 결과 : ['안', '세', '녕', '하', '요'] 방문 결과 : ['안', '세', '녕', '요'] 방문 결과 : ['안', '세', '녕', '요', '하'] 방문 결과 : ['안', '세', '하'] 방문 결과 : ['안', '세', '하', '녕'] 방문 결과 : ['안', '세', '하', '녕', '요'] 방문 결과 : ['안', '세', '하', '요'] 방문 결과 : ['안', '세', '하', '요', '녕'] 방문 결과 : ['안', '세', '요'] 방문 결과 : ['안', '세', '요', '녕'] 방문 결과 : ['안', '세', '요', '녕', '하'] 방문 결과 : ['안', '세', '요', '하'] 방문 결과 : ['안', '세', '요', '하', '녕'] 방문 결과 : ['안', '요'] 방문 결과 : ['안', '요', '녕'] 방문 결과 : ['안', '요', '녕', '하'] 방문 결과 : ['안', '요', '녕', '하', '세'] 방문 결과 : ['안', '요', '녕', '세'] 방문 결과 : ['안', '요', '녕', '세', '하'] 방문 결과 : ['안', '요', '하'] 방문 결과 : ['안', '요', '하', '녕'] 방문 결과 : ['안', '요', '하', '녕', '세'] 방문 결과 : ['안', '요', '하', '세'] 방문 결과 : ['안', '요', '하', '세', '녕'] 방문 결과 : ['안', '요', '세'] 방문 결과 : ['안', '요', '세', '녕'] 방문 결과 : ['안', '요', '세', '녕', '하'] 방문 결과 : ['안', '요', '세', '하'] 방문 결과 : ['안', '요', '세', '하', '녕'] 방문 결과 : ['녕'] 방문 결과 : ['녕', '안'] 방문 결과 : ['녕', '안', '하'] 방문 결과 : ['녕', '안', '하', '세'] 방문 결과 : ['녕', '안', '하', '세', '요'] 방문 결과 : ['녕', '안', '하', '요'] 방문 결과 : ['녕', '안', '하', '요', '세'] 방문 결과 : ['녕', '안', '세'] 방문 결과 : ['녕', '안', '세', '하'] 방문 결과 : ['녕', '안', '세', '하', '요'] 방문 결과 : ['녕', '안', '세', '요'] 방문 결과 : ['녕', '안', '세', '요', '하'] 방문 결과 : ['녕', '안', '요'] 방문 결과 : ['녕', '안', '요', '하'] 방문 결과 : ['녕', '안', '요', '하', '세'] 방문 결과 : ['녕', '안', '요', '세'] 방문 결과 : ['녕', '안', '요', '세', '하'] 방문 결과 : ['녕', '하'] 방문 결과 : ['녕', '하', '안'] 방문 결과 : ['녕', '하', '안', '세'] 방문 결과 : ['녕', '하', '안', '세', '요'] 방문 결과 : ['녕', '하', '안', '요'] 방문 결과 : ['녕', '하', '안', '요', '세'] 방문 결과 : ['녕', '하', '세'] 방문 결과 : ['녕', '하', '세', '안'] 방문 결과 : ['녕', '하', '세', '안', '요'] 방문 결과 : ['녕', '하', '세', '요'] 방문 결과 : ['녕', '하', '세', '요', '안'] 방문 결과 : ['녕', '하', '요'] 방문 결과 : ['녕', '하', '요', '안'] 방문 결과 : ['녕', '하', '요', '안', '세'] 방문 결과 : ['녕', '하', '요', '세'] 방문 결과 : ['녕', '하', '요', '세', '안'] 방문 결과 : ['녕', '세'] 방문 결과 : ['녕', '세', '안'] 방문 결과 : ['녕', '세', '안', '하'] 방문 결과 : ['녕', '세', '안', '하', '요'] 방문 결과 : ['녕', '세', '안', '요'] 방문 결과 : ['녕', '세', '안', '요', '하'] 방문 결과 : ['녕', '세', '하'] 방문 결과 : ['녕', '세', '하', '안'] 방문 결과 : ['녕', '세', '하', '안', '요'] 방문 결과 : ['녕', '세', '하', '요'] 방문 결과 : ['녕', '세', '하', '요', '안'] 방문 결과 : ['녕', '세', '요'] 방문 결과 : ['녕', '세', '요', '안'] 방문 결과 : ['녕', '세', '요', '안', '하'] 방문 결과 : ['녕', '세', '요', '하'] 방문 결과 : ['녕', '세', '요', '하', '안'] 방문 결과 : ['녕', '요'] 방문 결과 : ['녕', '요', '안'] 방문 결과 : ['녕', '요', '안', '하'] 방문 결과 : ['녕', '요', '안', '하', '세'] 방문 결과 : ['녕', '요', '안', '세'] 방문 결과 : ['녕', '요', '안', '세', '하'] 방문 결과 : ['녕', '요', '하'] 방문 결과 : ['녕', '요', '하', '안'] 방문 결과 : ['녕', '요', '하', '안', '세'] 방문 결과 : ['녕', '요', '하', '세'] 방문 결과 : ['녕', '요', '하', '세', '안'] 방문 결과 : ['녕', '요', '세'] 방문 결과 : ['녕', '요', '세', '안'] 방문 결과 : ['녕', '요', '세', '안', '하'] 방문 결과 : ['녕', '요', '세', '하'] 방문 결과 : ['녕', '요', '세', '하', '안'] 방문 결과 : ['하'] 방문 결과 : ['하', '안'] 방문 결과 : ['하', '안', '녕'] 방문 결과 : ['하', '안', '녕', '세'] 방문 결과 : ['하', '안', '녕', '세', '요'] 방문 결과 : ['하', '안', '녕', '요'] 방문 결과 : ['하', '안', '녕', '요', '세'] 방문 결과 : ['하', '안', '세'] 방문 결과 : ['하', '안', '세', '녕'] 방문 결과 : ['하', '안', '세', '녕', '요'] 방문 결과 : ['하', '안', '세', '요'] 방문 결과 : ['하', '안', '세', '요', '녕'] 방문 결과 : ['하', '안', '요'] 방문 결과 : ['하', '안', '요', '녕'] 방문 결과 : ['하', '안', '요', '녕', '세'] 방문 결과 : ['하', '안', '요', '세'] 방문 결과 : ['하', '안', '요', '세', '녕'] 방문 결과 : ['하', '녕'] 방문 결과 : ['하', '녕', '안'] 방문 결과 : ['하', '녕', '안', '세'] 방문 결과 : ['하', '녕', '안', '세', '요'] 방문 결과 : ['하', '녕', '안', '요'] 방문 결과 : ['하', '녕', '안', '요', '세'] 방문 결과 : ['하', '녕', '세'] 방문 결과 : ['하', '녕', '세', '안'] 방문 결과 : ['하', '녕', '세', '안', '요'] 방문 결과 : ['하', '녕', '세', '요'] 방문 결과 : ['하', '녕', '세', '요', '안'] 방문 결과 : ['하', '녕', '요'] 방문 결과 : ['하', '녕', '요', '안'] 방문 결과 : ['하', '녕', '요', '안', '세'] 방문 결과 : ['하', '녕', '요', '세'] 방문 결과 : ['하', '녕', '요', '세', '안'] 방문 결과 : ['하', '세'] 방문 결과 : ['하', '세', '안'] 방문 결과 : ['하', '세', '안', '녕'] 방문 결과 : ['하', '세', '안', '녕', '요'] 방문 결과 : ['하', '세', '안', '요'] 방문 결과 : ['하', '세', '안', '요', '녕'] 방문 결과 : ['하', '세', '녕'] 방문 결과 : ['하', '세', '녕', '안'] 방문 결과 : ['하', '세', '녕', '안', '요'] 방문 결과 : ['하', '세', '녕', '요'] 방문 결과 : ['하', '세', '녕', '요', '안'] 방문 결과 : ['하', '세', '요'] 방문 결과 : ['하', '세', '요', '안'] 방문 결과 : ['하', '세', '요', '안', '녕'] 방문 결과 : ['하', '세', '요', '녕'] 방문 결과 : ['하', '세', '요', '녕', '안'] 방문 결과 : ['하', '요'] 방문 결과 : ['하', '요', '안'] 방문 결과 : ['하', '요', '안', '녕'] 방문 결과 : ['하', '요', '안', '녕', '세'] 방문 결과 : ['하', '요', '안', '세'] 방문 결과 : ['하', '요', '안', '세', '녕'] 방문 결과 : ['하', '요', '녕'] 방문 결과 : ['하', '요', '녕', '안'] 방문 결과 : ['하', '요', '녕', '안', '세'] 방문 결과 : ['하', '요', '녕', '세'] 방문 결과 : ['하', '요', '녕', '세', '안'] 방문 결과 : ['하', '요', '세'] 방문 결과 : ['하', '요', '세', '안'] 방문 결과 : ['하', '요', '세', '안', '녕'] 방문 결과 : ['하', '요', '세', '녕'] 방문 결과 : ['하', '요', '세', '녕', '안'] 방문 결과 : ['세'] 방문 결과 : ['세', '안'] 방문 결과 : ['세', '안', '녕'] 방문 결과 : ['세', '안', '녕', '하'] 방문 결과 : ['세', '안', '녕', '하', '요'] 방문 결과 : ['세', '안', '녕', '요'] 방문 결과 : ['세', '안', '녕', '요', '하'] 방문 결과 : ['세', '안', '하'] 방문 결과 : ['세', '안', '하', '녕'] 방문 결과 : ['세', '안', '하', '녕', '요'] 방문 결과 : ['세', '안', '하', '요'] 방문 결과 : ['세', '안', '하', '요', '녕'] 방문 결과 : ['세', '안', '요'] 방문 결과 : ['세', '안', '요', '녕'] 방문 결과 : ['세', '안', '요', '녕', '하'] 방문 결과 : ['세', '안', '요', '하'] 방문 결과 : ['세', '안', '요', '하', '녕'] 방문 결과 : ['세', '녕'] 방문 결과 : ['세', '녕', '안'] 방문 결과 : ['세', '녕', '안', '하'] 방문 결과 : ['세', '녕', '안', '하', '요'] 방문 결과 : ['세', '녕', '안', '요'] 방문 결과 : ['세', '녕', '안', '요', '하'] 방문 결과 : ['세', '녕', '하'] 방문 결과 : ['세', '녕', '하', '안'] 방문 결과 : ['세', '녕', '하', '안', '요'] 방문 결과 : ['세', '녕', '하', '요'] 방문 결과 : ['세', '녕', '하', '요', '안'] 방문 결과 : ['세', '녕', '요'] 방문 결과 : ['세', '녕', '요', '안'] 방문 결과 : ['세', '녕', '요', '안', '하'] 방문 결과 : ['세', '녕', '요', '하'] 방문 결과 : ['세', '녕', '요', '하', '안'] 방문 결과 : ['세', '하'] 방문 결과 : ['세', '하', '안'] 방문 결과 : ['세', '하', '안', '녕'] 방문 결과 : ['세', '하', '안', '녕', '요'] 방문 결과 : ['세', '하', '안', '요'] 방문 결과 : ['세', '하', '안', '요', '녕'] 방문 결과 : ['세', '하', '녕'] 방문 결과 : ['세', '하', '녕', '안'] 방문 결과 : ['세', '하', '녕', '안', '요'] 방문 결과 : ['세', '하', '녕', '요'] 방문 결과 : ['세', '하', '녕', '요', '안'] 방문 결과 : ['세', '하', '요'] 방문 결과 : ['세', '하', '요', '안'] 방문 결과 : ['세', '하', '요', '안', '녕'] 방문 결과 : ['세', '하', '요', '녕'] 방문 결과 : ['세', '하', '요', '녕', '안'] 방문 결과 : ['세', '요'] 방문 결과 : ['세', '요', '안'] 방문 결과 : ['세', '요', '안', '녕'] 방문 결과 : ['세', '요', '안', '녕', '하'] 방문 결과 : ['세', '요', '안', '하'] 방문 결과 : ['세', '요', '안', '하', '녕'] 방문 결과 : ['세', '요', '녕'] 방문 결과 : ['세', '요', '녕', '안'] 방문 결과 : ['세', '요', '녕', '안', '하'] 방문 결과 : ['세', '요', '녕', '하'] 방문 결과 : ['세', '요', '녕', '하', '안'] 방문 결과 : ['세', '요', '하'] 방문 결과 : ['세', '요', '하', '안'] 방문 결과 : ['세', '요', '하', '안', '녕'] 방문 결과 : ['세', '요', '하', '녕'] 방문 결과 : ['세', '요', '하', '녕', '안'] 방문 결과 : ['요'] 방문 결과 : ['요', '안'] 방문 결과 : ['요', '안', '녕'] 방문 결과 : ['요', '안', '녕', '하'] 방문 결과 : ['요', '안', '녕', '하', '세'] 방문 결과 : ['요', '안', '녕', '세'] 방문 결과 : ['요', '안', '녕', '세', '하'] 방문 결과 : ['요', '안', '하'] 방문 결과 : ['요', '안', '하', '녕'] 방문 결과 : ['요', '안', '하', '녕', '세'] 방문 결과 : ['요', '안', '하', '세'] 방문 결과 : ['요', '안', '하', '세', '녕'] 방문 결과 : ['요', '안', '세'] 방문 결과 : ['요', '안', '세', '녕'] 방문 결과 : ['요', '안', '세', '녕', '하'] 방문 결과 : ['요', '안', '세', '하'] 방문 결과 : ['요', '안', '세', '하', '녕'] 방문 결과 : ['요', '녕'] 방문 결과 : ['요', '녕', '안'] 방문 결과 : ['요', '녕', '안', '하'] 방문 결과 : ['요', '녕', '안', '하', '세'] 방문 결과 : ['요', '녕', '안', '세'] 방문 결과 : ['요', '녕', '안', '세', '하'] 방문 결과 : ['요', '녕', '하'] 방문 결과 : ['요', '녕', '하', '안'] 방문 결과 : ['요', '녕', '하', '안', '세'] 방문 결과 : ['요', '녕', '하', '세'] 방문 결과 : ['요', '녕', '하', '세', '안'] 방문 결과 : ['요', '녕', '세'] 방문 결과 : ['요', '녕', '세', '안'] 방문 결과 : ['요', '녕', '세', '안', '하'] 방문 결과 : ['요', '녕', '세', '하'] 방문 결과 : ['요', '녕', '세', '하', '안'] 방문 결과 : ['요', '하'] 방문 결과 : ['요', '하', '안'] 방문 결과 : ['요', '하', '안', '녕'] 방문 결과 : ['요', '하', '안', '녕', '세'] 방문 결과 : ['요', '하', '안', '세'] 방문 결과 : ['요', '하', '안', '세', '녕'] 방문 결과 : ['요', '하', '녕'] 방문 결과 : ['요', '하', '녕', '안'] 방문 결과 : ['요', '하', '녕', '안', '세'] 방문 결과 : ['요', '하', '녕', '세'] 방문 결과 : ['요', '하', '녕', '세', '안'] 방문 결과 : ['요', '하', '세'] 방문 결과 : ['요', '하', '세', '안'] 방문 결과 : ['요', '하', '세', '안', '녕'] 방문 결과 : ['요', '하', '세', '녕'] 방문 결과 : ['요', '하', '세', '녕', '안'] 방문 결과 : ['요', '세'] 방문 결과 : ['요', '세', '안'] 방문 결과 : ['요', '세', '안', '녕'] 방문 결과 : ['요', '세', '안', '녕', '하'] 방문 결과 : ['요', '세', '안', '하'] 방문 결과 : ['요', '세', '안', '하', '녕'] 방문 결과 : ['요', '세', '녕'] 방문 결과 : ['요', '세', '녕', '안'] 방문 결과 : ['요', '세', '녕', '안', '하'] 방문 결과 : ['요', '세', '녕', '하'] 방문 결과 : ['요', '세', '녕', '하', '안'] 방문 결과 : ['요', '세', '하'] 방문 결과 : ['요', '세', '하', '안'] 방문 결과 : ['요', '세', '하', '안', '녕'] 방문 결과 : ['요', '세', '하', '녕'] 방문 결과 : ['요', '세', '하', '녕', '안'] 325
이번 게시물에서는 재귀 함수를 사용하여 리스트를 모두 조회하는 방법에 대해서 알아보았습니다. 다음에는 재귀 함수가 아닌 반복문 하나로 처리하는 방법을 알아보겠습니다.
댓글 0개
댓글은 일회용 패스워드가 발급되며 사이트 이용 약관에 동의로 간주됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.