학습 로그/Python3

D+11 [Python] 리스트 실습

goodjop79 님의 블로그 2026. 4. 16. 22:25

ㅇ 일자 : 2026년 4월 13일-15일
ㅇ 리스트 예제 문제, 과제문제 풀이와 이해, 반복 숙달  (순서도, 함수)
 

순서도-리스트(예제37번-50번).drawio
0.36MB
Untitled0260415리스트예제.ipynb
0.02MB

 

 

In [ ]:
#예제37 1~10까지 수 리스트에 저장하고 출력하기
a = []
for i in range(1, 11):
  a.append(i)
print(a)
 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
In [ ]:
a = []
for i in range(1,10,1):
  a.append(i)
for i in range(9,0,-1)
print(a)
 
File "/tmp/ipykernel_7636/3462089699.py", line 4 for i in range(9,0,-1) ^ SyntaxError: expected ':'
In [ ]:
#예제38 1~100까지 저장하고 거꾸로 출력하기
a=[]
for i in range(10,101,10):
  a.append(i)
for i in range(9,-1,-1):
  print(a[i], end="")
 
100908070605040302010
In [ ]:
#예제39 리스트 거꾸소 뒤집기(temp)
a = [1,2,3,4,5,6,7,8,9,10]
for i in range(e,5)
temp = a[i]
a[i] = a[9-i]
a[9-i] = temp
print(a)
In [ ]:
#예제40 리스트 a요소 리스트 b에 거꾸로 저장하기 (append)
#리스트에 입력할 요소들을 []에 입력한다
a = [1,2,3,4,5,6,7,8,9,10]
b=[]
for i in range(0,10):
  b.append(a[9-i])
  print(b)
 
[10] [10, 9] [10, 9, 8] [10, 9, 8, 7] [10, 9, 8, 7, 6] [10, 9, 8, 7, 6, 5] [10, 9, 8, 7, 6, 5, 4] [10, 9, 8, 7, 6, 5, 4, 3] [10, 9, 8, 7, 6, 5, 4, 3, 2] [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
In [ ]:
#추가예-리스트에 입력할 요소들을 []에 입력한다
a = [0,1,2,3,4,5,6,7,8,9,10,11]
b=[]
for i in range(0,10):
  b.append(a[8-i])
  print(b)
 
[8] [8, 7] [8, 7, 6] [8, 7, 6, 5] [8, 7, 6, 5, 4] [8, 7, 6, 5, 4, 3] [8, 7, 6, 5, 4, 3, 2] [8, 7, 6, 5, 4, 3, 2, 1] [8, 7, 6, 5, 4, 3, 2, 1, 0] [8, 7, 6, 5, 4, 3, 2, 1, 0, 11]
In [ ]:
#예제41 리스트 요소 왼쪽으로 한칸씩 원형으로 이동하기
a = [1,2,3,4,5,6,7,8,9,10]
temp=a[0]
for i in rnage(0, 9):
  a[i] = a[i+1]
a[9] = temp
print(a)
 
--------------------------------------------------------------------------- NameError Traceback (most recent call last) /tmp/ipykernel_7636/1355727657.py in <cell line: 0>() 2 a = [1,2,3,4,5,6,7,8,9,10] 3 temp=a[0] ----> 4 for i in rnage(0, 8): 5 a[i] = a[i+1] 6 a[9] = temp NameError: name 'rnage' is not defined
In [ ]:
a = [1,2,3,4,5,6,7,8,9,10]
temp=a[0]
for i in range(0, 9):
  a[i] = a[i+1]
a[9] = temp
print(a)
 
[2, 3, 4, 5, 6, 7, 8, 9, 10, 1]
In [ ]:
#예제42 리스트 요소 중 최댓값 구하기 (max) import randao 선언
import random
a = []
for i in range(10):
  a.append(random.randint(1,100))
  print(a)
  m = a[0]
  for i in range(1, 10):
    if m<a[i]:
      m = a[i]
print("최대값:",m)
 
[13]
 
--------------------------------------------------------------------------- IndexError Traceback (most recent call last) /tmp/ipykernel_7636/1022767354.py in <cell line: 0>() 7 m = a[0] 8 for i in range(1, 10): ----> 9 if m<a[i]: 10 m = a[i] 11 print("최대값:",m) IndexError: list index out of range
In [ ]:
import random
a = []
for i in range(10):
  a.append(random.randint(1,100))
print(a)
m = a[0]
for i in range(1, 10):
    if m<a[i]:
      m = a[i]
print("최대값:",m)
 
[70, 53, 58, 4, 97, 57, 75, 53, 20, 51] 최대값: 97
In [ ]:
#예제43 에라토스테네스의 체 이용 1~100까지 소수 구현하기
a = []
# 시작수를 2로 한다, 102는 왜 그렇지?
for i in range(1, 102):
  a.append(0)
for i in range(2, 101):
  if a[i]==0:
    for j in range(i*2, 101,i):
      a[j] = 1

for i in range(2, 101):
  if a[i]==0:
# end= "두타사이띄기" 간격을 조정할 수 있다
    print(i, end=" ")
 
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
In [ ]:
#예제44 10진수를 2진수로 변환해 리스트에 저장 (while)
#n이 0이 아닌지 판별한다
#10진수 n을 2로 나눈후 나머지를 b(a)에 저장
#배열 b에 저장된 내용을 거꾸로 출력위해 i값 a-1부터 1씩 감소0까지 반복
b = []
n = int(input("정수"))
while n!=0:
  b.append(n%2)
  n=n//2
for i in range(len(b)-1,-1,-1):
  print(b[i], end=" ")
 
정수42 1 0 1 0 1 0
In [ ]:
#예제45 배열에 저장된 2진수를 10진수로 변환하기
b=[1,1,0,0,1]
n=0
for i in range(0,5):
  n=n+b[i]*(2**(4-i))
print(n)
 
25
In [ ]:
#예제46 선택 탐색 알고리즘 (cnt)
# a = 15와 7을 비교
a = [26,27,39,63,57,75,11,76,80,18]
key = int(input("키:"))
cnt = 0
while cnt<10:
  if key == a[cnt]:
    print(cnt,"에서 탐색 성공")
    break
    cnt = cnt+1
if cnt == 10:
  print("탐색 실패")
 
키:11
 
--------------------------------------------------------------------------- KeyboardInterrupt Traceback (most recent call last) /tmp/ipykernel_7636/2598306063.py in <cell line: 0>() 4 key = int(input("키:")) 5 cnt = 0 ----> 6 while cnt<10: 7 if key == a[cnt]: 8 print(cnt,"에서 탐색 성공") KeyboardInterrupt:
In [ ]:
a = [26,27,39,63,57,75,11,76,80,18]
key = int(input("키:"))
cnt = 0
while cnt<10:
  if key == a[cnt]:
    print(cnt,"에서 탐색 성공")
    break
  cnt = cnt+1
if cnt == 10:
  print("탐색 실패")
 
키:187 탐색 실패
In [ ]:
# 예제47 이진 탐색 알고리즘
a = [11, 18, 26, 27, 39, 57, 63, 75, 76, 80]
key = int(input("키 : "))
low = 0
high = 9
while low<=high:
    mid = (low+high)//2
    if key == a[mid]:
        print(mid, "에서 탐색 성공")
        break
    elif key < a[mid]:
        high = mid-1
    else:
        low = mid+1
if low > high:
    print("탐색 실패")
 
키 : 39 4 에서 탐색 성공
In [ ]:
#48 선택 정렬 알고리즘
a = [20, 50, 30, 10, 60, 40]
for i in range(0, 5):
    m = i
    for j in range(i+1, 6):
        if a[j]<a[m]:
            m = j

    temp = a[i]
    a[i] = a[m]
    a[m] = temp
print(a)
 
[10, 20, 30, 40, 50, 60]
 
예제 49. 임의의 리스트에 요소를 원하는 만큼 무작위로 넣고, 버블 정렬 알고리즘을 구현하여 정렬하라





버블 정렬은 서로 이웃한 데이터들을 비교하며 가장 큰 데이터를 가장 뒤로 보내며 정렬하는 방식이다.
버블 정렬의 동작 과정을 다음과 같은 데이터를 이용해서 살펴보자.

In [2]:
#예49. 버블 정렬 알고리즘
a= [20, 50, 30, 10, 60, 40]
for i in range(0,5):
  for j in range(0, 5-i):
    if a[j] > a[j+1]:
      temp = a[j]
      a[j] = a[j+1]
      a[j+1]=temp
print(a)
 
[10, 20, 30, 40, 50, 60]
 
임의의 리스트 2개에 요소를 원하는 만큼 무작위로 넣고, 병 정렬 알고리즘을 구현하여 정렬하라.
병합 정렬은 정렬된 두 개의 데이터 집합을 하나의 정렬된 데이터 집합으로 만드는 방법으로, 동작 과정을 다음과 같은 정렬된 데이터 집합인 배열 a와 배열 b에 대해 살펴보자.
In [ ]:
#예50. 병합 정렬 알고리즘
a = [1,3,5,7]
b = [3,4,8,10]
c= []
i=0
j=0
while i<4 and j<4:
  if a[i]<b[j]:
    c.append(a[i])
    i = i+1
  else:
    c.append(b[j])
    j=j+1
if i==4:
  while j<4:
    c.append(b[j])
  else:
    while i<4:
      c.append(a[i])
      i=i+1
print(c)
In [5]:
#과제28. 20부터 1까지 수를 차례로 리스트에 저장하고 출력하기
a = []
for i in range(10,0,-1):
  a.append(i)
print(a)
 
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
 
리스트 예) a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
In [6]:
#과제29. 리스트 요소를 오른쪽으로 한 칸씩 원형으로 이동
a = [1,2,3,4,5,6,7,8,9,10]
temp = a[9]
for i in range(9,0,-1):
  a[i] = a[i-1]
a[0]=temp
print(a)
 
[10, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [12]:
#과제30. 임의의 10개의 수를 저장하고 리스트에서 최소값 구하기
import random
a= []
for i in range(10):
  a.append(random.randint(1,100))
print(a)
m = a[0]
for i in range(1, 10):
    if m > a[i]:
      m = [i]
print("최소값:",m)
 
[48, 79, 11, 13, 61, 20, 17, 1, 94, 80]
 
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) /tmp/ipykernel_9011/906815197.py in <cell line: 0>() 7 m = a[0] 8 for i in range(1, 10): ----> 9 if m > a[i]: 10 m = [i] 11 print("최소값:",m) TypeError: '>' not supported between instances of 'list' and 'int'
In [17]:
#과제31. 입력받은 10진수로 변환하여 출력하기
o = []
n = int(input("10진수:"))
while n!=0:
    o.append(n%8)
    n = n/8
for i in range(len(0)-1, -1 , -1):
    print(0[i], end="")
 
<>:8: SyntaxWarning: 'int' object is not subscriptable; perhaps you missed a comma? <>:8: SyntaxWarning: 'int' object is not subscriptable; perhaps you missed a comma?
 
10진수:39
 
/tmp/ipykernel_9011/2943926482.py:8: SyntaxWarning: 'int' object is not subscriptable; perhaps you missed a comma? print(0[i], end="")
 
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) /tmp/ipykernel_9011/2943926482.py in <cell line: 0>() 5 o.append(n%8) 6 n = n/8 ----> 7 for i in range(len(0)-1, -1 , -1): 8 print(0[i], end="") TypeError: object of type 'int' has no len()
 
리스트에 저장된 8진수를 10진수로 변환하는 순서도와 파이썬 프로그램을 작성하여라.

예) 8진수 56743 을 리스트 [5,6,7,4,3] 와 같이 입력하여 / 10진수로 변환
In [20]:
#과제32. 리스트에 저장된 8진수를 10진수로 변환하기
o = [5,6,7,4,3]
n = 0
for i in range(0,5):
    n=n+o[i]*(8**(4-i)
print(n)
 
File "/tmp/ipykernel_9011/3034922100.py", line 5 n=n+o[i]*(8**(4-i) ^ SyntaxError: '(' was never closed
In [21]:
o  = [5,6,7,4,3]
n = 0
for i in range(0, 5):
    n = n + o[i]*(8**(4-i))
print(n)
 
24035
 
내림차순으로 정렬된 데이터 집합에 대한 이진 탐색을 하는 순서도와 파이썬 프로그램을 작성하여라.

리스트 예) a = [80, 76, 75, 63, 57, 39, 27, 26, 18, 11]
In [27]:
#과제 33. 내림차순으로 정렬된 데이터 집합에 대한 이진 탐색하기
a = [80,76,75,63,57,39,27,26,18,11]
key = int(input("키:"))
lwo = 0
high = 9
while low<=high:
  mid = (low+high)//2
  if key == a[mid]:
     print(mid, "번째 인덱스에서 탐색 성공")
     break
  elif key > a[mid]:
    high = mid-1
  else:
    low = mid+1
if low > high:
  print("탐색 실패")
 
키:180
 
--------------------------------------------------------------------------- NameError Traceback (most recent call last) /tmp/ipykernel_9011/436263412.py in <cell line: 0>() 4 lwo = 0 5 high = 9 ----> 6 while low<=high: 7 mid = (low+high)//2 8 if key == a[mid]: NameError: name 'low' is not defined
In [28]:
a = [80, 76, 75, 63, 57, 39, 27, 26, 18, 11]
key = int(input("키 : "))
low = 0
high = 9
while low<=high:
    mid = (low+high)//2
    if key == a[mid]:
        print(mid, "번째 인덱스에서 탐색 성공")
        break
    elif key > a[mid]:
        high = mid-1
    else:
        low = mid+1
if low > high:
    print("탐색 실패")
 
키 : 26 7 번째 인덱스에서 탐색 성공
 
 
 
삽입 정렬은 다음과 같이 이미 정렬된 부분에서 자신의 위치를 찾아 삽입하며 정렬하는 방식이다
삽입 정렬을 이용해서 정렬
In [29]:
#34. 정렬하는 방식
a = [3,7,2,8,5,1,10,9,4,6]
for i in range(1,10):
  key = a[i]
  j = i-1
  while j>=0:
    if key<a[j]:
      a[j+1]=a[j]
    else:
      break
    j=j-1
  a[j+1] = key
print(a)
 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Exported with runcell — convert notebooks to HTML or PDF anytime at runcell.dev.