본문 바로가기
study/python

파이썬 리스트(List) 활용, 정렬 예제

by kuah_ 2022. 5. 31.

 

 

 

 

Q1. 리스트 ls = [10,5,20,7,9,31,12,11,19,32] 가 있다고 할 때, 각 요소에 가중치를 3씩 부여하여 오름차순으로 출력

(선택정렬 알고리즘 활용 / for문은 이중 for문 하나만 사용)

선택정렬 알고리즘(오름차순) : 맨 앞자리부터 n번째 수와 나머지를 비교하여 더 작은 수를 n번으로 옮기는 알고리즘

 

 

A. 

1
2
3
4
5
6
7
8
9
10
11
# ver.1
ls = [10,5,20,7,9,31,12,11,19,32]
i,j =0,0
print('변경전 : ',ls) # 변경 전 리스트  출력
for i in range(len(ls)-1): # 리스트 마지막 요소 직전까지 반복
    for j in range(i+1,len(ls)): 
        if ls[i] > ls[j]:
               ls[i],ls[j]=ls[j],ls[i] #swap
    else: ls[i] = ls[i] + 3 # 정렬 후 요소 +3
else: ls[j] = ls[j] + 3
print('변경후 : ',ls)
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
# ver.2
ls = [10,5,20,7,9,31,12,11,19,32]
i,j = 0,0
print('변경전 : ',ls)
for i in range(len(ls)-1):
    for j in range(i+1,len(ls)):
        if ls[i] > ls[j]:
               ls[i], ls[j] = ls[j], ls[i]
 
ls = [i+for i, j in zip([3]*len(ls),ls) ]
# 3*len(ls)는 [3,3,3,3,3,3,3,3,3,3] 리스트가 생기는 것과 같다
# zip코드를 이용해 ls와 위 리스트를 짝지어서 각 요소별로 더하는 방식
print('변경후 : ',ls)
cs

 


 

 

Q2 - 1. 리스트 ls에는 1~10까지의 정수를 저장하고, lsAdd에는 random 함수를 활용하여 임의의 수 10개를 저장

Q2 - 2. lsResult에 두 리스트를 차례로 삽입하고, 모든 요소를 오름차순으로 정렬 (sort 함수 활용)

Q2 - 3. lsResult 안에 중복되는 숫자와 중복 개수를 각각 출력

Q2 - 4. lsResult에서 중복되는 값을 한개만 남겨둔채 삭제하고 삭제한 결과 출력 

 

 

A. 

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
37
38
39
import random
ls = []
lsAdd = []
lsResult = []
count = 0
 
# 1
print("\n1. ------------------------------\n")
for i in range(111) :
  ls.append(i)
  lsAdd.append(random.randrange(111))
  # random.random()*10+1 도 가능
print("ls : ", ls)
print("lsAdd : ", lsAdd)
 
# 2
print("\n2. ------------------------------\n")
lsResult.extend(ls)
lsResult.extend(lsAdd)
lsResult.sort()
print("lsResult : ", lsResult)
 
# 3
print("\n3. ------------------------------\n")
print("lsResult 내부 숫자 개수 : ",len(lsResult))
print("중복되는 숫자와 개수 : ")
for i in range(len(lsResult)) :
  count = lsResult.count(i)
  if count>1 :
    print("숫자 : ", i, "\t개수 : ",count)
 
# 4
print("\n4. ------------------------------\n")
for i in range(len(lsResult)) :
  count = lsResult.count(i)
  if count>1 :
    for j in range(1, count) :
      lsResult.remove(i)
print("lsResult : ", lsResult)
cs

 


 

 

Q3. 로또 번호 추첨기 : 1부터 45까지의 숫자를 중복 없이 7개 출력

 

 

A.

1
2
3
4
5
6
7
8
9
10
11
12
13
import random
lotto = []
num = 0
 
for i in range(6) :
  num = random.randrange(146)
  while num in lotto :
    num = random.randrange(146)
  lotto.append(num)
  
print("\n=== 로또 추첨 ===")
lotto.sort() # 정렬
print("추첨된 번호 : "*lotto, end="\n\n"# *연산자는 리스트의 괄호를 해제
cs

 

 

 

 

댓글