[PYTHON] 리스트 합치기
<중복제거하여 자동으로 오름차순이 되게 리스트 합치기>
-
문제
두 리스트를 중복을 제거하면서 오름차순으로 합치세요
-
알고리즘 표현
1. 각 list를 먼저 sort()로 정렬을 한후에 한개씩 비교하며 더 작은 값을 새로운 list에 추가한다.
2. 추가한 후에 다음 index값을 비교하여 또다시 더 작은 값을 추가하는 방식이다.
3. 비교를 끝낸 후, list의 남은 부분은 최종적으로 한번에 추가한다.
-
input 값
5
1 4 6 3 2
7
2 6 3 9 6 13 11
1) 첫번째 방법 -> 정석적인 방법대로, 알고리즘 표현 방식대로
- 리스트를 하나씩 비교하며, 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
N = int(input()) #n_list의 개수 5
n_list = list(map(int, input().split())) #[1, 4, 6, 3, 2]
n_list.sort() #미리 정렬
M = int(input()) #m_list의 개수 7
m_list = list(map(int, input().split())) #[2, 6, 3, 9, 6, 13, 11]
m_list.sort() #미리 정렬
## 여기까지는 입력값 출력
n_index = 0 #n_list의 index표현
m_index = 0 #m_list의 index표현
sum_list = [] #순서대로 숫자를 넣을 빈 깡통을 만들어준다.
#아래 과정은 각 list를 미리 정렬했기때문에 가능하다.
while n_index<N and m_index<M: #각 list를 한개씩 반복하기, 더 적은 list 개수까지만 반복
if n_list[n_index]<m_list[m_index] : #0부터 넣은 index중
sum_list.append(n_list[n_index]) #더 작은 값부터 넣기 위함.
n_index+=1
elif n_list[n_index]>m_list[m_index]:#0부터 넣은 index중
sum_list.append(m_list[m_index]) #더 작은 값부터 넣기 위함.
m_index+=1
elif n_list[n_index]==m_list[m_index]:#두값이 같다면 각 list의 index를 모두 +1을 해야한다.(중복방지)
sum_list.append(m_list[m_index])
m_index+=1 #중요
n_index+=1 #중요
if n_index<N: #list의 남은 값들을 모두 넣어준다.
sum_list+=n_list[n_index::] # 마지막 index 생략 가능
if m_index<M: #list의 남은 값들을 모두 넣어준다.
sum_list+=m_list[m_index::] # 마지막 index 생략 가능
print(sum_list) #합쳐진 최종 list출력
|
cs |
- 결과값
[1, 2, 3, 4, 6, 7, 10, 13]
2) 두번째 방법 -> 파이썬의 자료형인 set을 이용한 방법
set이 무엇이냐!!
list처럼 하나의 자료형인데, 자동정렬 및 자동중복제거를 가능하게 해줌
즉 이 set으로 바꾼것을 다시 list로 바꾸면 내가 원하는 list형식으로 볼수 있다.
1. list끼리 더하기 -> 행렬의 합처럼 더해지는 것이 아니라 이어 붙여준다.
2. set(list)로 바꾸기 -> 중복제거 및 자동정력
3. 다시 list(set(list)) -> list의 형태로 보여지기 위함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
n_list = [1, 4, 6, 3, 2]
# N = int(input()) #n_list의 개수
N = len(n_list) # 위 코드와 같은 역할을 할 것이다.
#n_list.sort() -> 정렬할 필요 없다
m_list = [2, 6, 3, 9, 6, 13, 11]
# M = int(input()) #m_list의 개수
N = len(m_list) # 위 코드와 같은 역할을 할 것이다.
#m_list.sort() -> 정렬할 필요 없다
## 여기까지는 입력값 출력
sum_list = n_list + m_list
sum_set = set(sum_list) # 자료형을 list -> set으로 변경
print(sum_set) # 결과값 1 row: set자료형으로 출력하기
print(list(sum_set)) # 결과값 2 row :list자료형으로 출력하기
|
cs |
- 결과값
{1, 2, 3, 4, 6, 9, 11, 13}
[1, 2, 3, 4, 6, 7, 10, 13]
-
배울코드
1. 미리 정렬을 하여 더 쉽게 비교할 수 있다는 것을 기억해야한다.
2. 중복되는 값이 있을 수도 있기 때문에 if - elif - elif 순으로 해야한다.
3. row 26중요 - 만약,if n_list = m_list 로 했었다면> m_list의 index값이 증가되지 않아 같은 값이 비교되어 중복값이 그대로 나타났을 것이다.
-> 이것만 뽑아내면 리스트의 교집합을 구할 수 있다.
4. 사실, 두번째 방법은 진짜 간단..-> 파이썬으로 풀거면 이렇게 하면되요
*)
어떤 피드백이든 댓글부탁드립니다.
더 좋은 방법이 있다면 알려주세요.
도움이 되셨다면, 하트버튼 또는 댓글부탁드려요~
요청할 문제가 있다면 댓글 부탁드려요!!!
*(
'python > 파이썬 예제' 카테고리의 다른 글
스도쿠가 정답인지 확인하는 코드 [#6] (0) | 2020.04.12 |
---|---|
파이썬 행의 합, 열의합, 최대값 구하는 함수[#5] (0) | 2020.03.21 |
파이썬 최빈값 구하시-dictionary 사용 [#4-1] (0) | 2020.03.18 |
파이썬으로 소수찾기 함수 [#2] (0) | 2020.03.15 |
파이썬 문자열 거꾸로 출력하는 방법 [#1] (0) | 2020.03.15 |