6장 파이썬 자료구조(리스트)
리스트의 효용성
비슷한 의미를 가지고 있는 자료들을 묶어 다루기 편하게 만드는 것으로 각 요소들이 리스트 이름 뒤에 []안에
0부터 순차적으로 할당된다. 또한 음수 인덱스(-1)의 경우 가장 뒤 요소를 의미한다.
리스트 연산
리스트에 요소들을 추가하거나 빼는 함수들이 존재한다. 먼저 append()는 리스트의 끝에 요소를 추가해주고,
insert()는 지정된 위치에 요소를 추가해준다. pop()은 인덱스 위치의 요소를 반환 후 제거한다. remove()는
지정된 값을 순차적으로 검색해 하나만 삭제한다. 또한 특정 값을 찾아주는 min(), max(), sum()함수도 있다.
리스트 제어
리스트의 요소가 아닌 리스트 단위로 제어하는 연산의 경우 사칙연산 기호를 활용하여 제어할 수 있다.
또한 비교 연산자를 사용하여 각 요소들을 비교 및 크기를 구별할 수 있다. 다만 리스트를 복제할 때는 이름이
아닌 list(tamp)를 사용하여 복제하여야 한다.
슬라이싱
리스트 또한 range()함수처럼 범위를 지정하여 표현할 수 있는데, ","가 아닌 ":"를 사용하여 표현한다. 사용 방법은 range()함수와 동일하다.
리스트와 함수
함수 안에 매개변수로 리스트가 전달될 경우 주소를 전달하여 원본을 조작하는 "참조로 전달" 방식과 같은 리스트를 복사하여 조작하고 원본을 수정되지 않는 "값으로 전달" 방식이 존재한다. 기본적으로 파이썬에서는
명시해주지 않을 경우 참조로 전달되어 원본이 조작된다.
리스트 함축
리스트 함축은 리스트를 생성할 때 요소들을 반복문 및 조건을 작성하여 특정 패턴으로 만들어진 요소들로 이루어진 리스트를 만드는 것이다. []안에 각 요소의 값, 반복 및 조건문을 적어 작성한다.
2차원 리스트
리스트의 형태를 열의 형태로 정의한다면 2차원 리스트의 형태는 행렬으로 정의할 수 있다. 각 요소는 행과 열값을 가지고 있고,
접근할 때나 호출 또는 변결할 때 [행][열]의 형태로 접근한다.
python_6_func.py)
import random
# 1
def mysum() :
x = int(input("입력할 값의 개수: "))
numbers = [int(input()) for i in range(x)]
print(f"값의 합계= {sum(numbers)}")
# 2
def makerandlst() :
lst = [random.randint(1, 100) for _ in range(10)]
print(list)
# 3
def printmul(a) :
for i in a:
print("*" * i)
# 4
def makelist(lst) :
lst[2:8] = [-i for i in range(3, 9)]
# 5
def chackfe(lst) :
cnt = sum(1 for i in lst if i[0] == i[-1])
print(f"문자열의 개수= {cnt}")
# 6
def chackdup(lst_1, lst_2):
print(any(x in lst_1 for x in lst_2))
# 7
def lirancho():
lst = ['a'+str(y) for y in range(0, 10)]
print(lst)
print(random.choice(lst))
# 8
def printdup(lst_1, lst_2):
duplst = [x for x in lst_1 if x in lst_2]
print(duplst)
# 9
def growline(lst, t):
for x in lst :
t.forward(x)
t.backward(x)
t.right(360/len(lst))
# 10
def draw_square(x, y, color, t):
t.penup()
t.goto(random.randint(-200, 200), random.randint(-200, 200))
t.pendown()
t.fillcolor(color)
t.begin_fill()
for _ in range(4):
t.forward(x)
t.right(90)
t.end_fill()
t.penup()
# 11
def dice_run(one, two):
dice = [1, 2, 3, 4, 5, 6]
cnt = int(input("게임의 수: "))
one.penup()
one.goto(0, 100)
one.pendown()
while(cnt):
one.color("blue")
one.shape("arrow")
distance = random.choice(dice)
one.forward(distance*10)
print("blue=", distance)
two.color("red")
two.shape("turtle")
distance = random.choice(dice)
two.forward(distance*10)
print("red=", distance)
cnt -= 1
# 12
#함수 없음
# 13
def view_seat():
seat = [[0]*10 for _ in range(10)]
print("-" *20)
for i in range(1, 11): print(i, end=" ")
print()
print("-" *20)
for row in seat: print(*row)
x = int(input("원하시는 좌석의 행변호를 입력하세요(종료는 -1):"))
if x == -1: return
y = int(input("원하시는 좌석의 열변호를 입력하세요(종료는 -1):"))
if y == -1: return
print("예약되었습니다.")
seat[x-1][y-1] += 1
for row in seat: print(*row)
# 14
def make_bombmap():
x = 20
y = 10
dif_per = 30
bombnum = int((dif_per / 100) * (x * y))
bombmap = [['.']*x for _ in range(y)]
placed = 0
while placed < bombnum:
r = random.randint(0, y - 1)
c = random.randint(0, x - 1)
if bombmap[r][c] == '#': continue
bombmap[r][c] = '#'
placed += 1
for row in bombmap: print(*row)
# 15
def roolet(lst) :
cnt = 1
max = 1
for i in range(1, len(lst)):
if lst[i] == lst[i-1]: cnt+=1
else:
if cnt > max : max = cnt
cnt = 1
if cnt > max: max = cnt
print("최대연속길이=", max)
# 16
def left_prime(a):
lst = [i for i in range(2, a+1)]
i = 0
while i < len(lst):
prime = lst[i]
j = i + 1
while j < len(lst):
if lst[j] % prime == 0: lst.pop(j)
else: j += 1
i += 1
print(lst)
python_6_main.py)
import python_6_func as func
import turtle
# 1
func.mysum()
# 2
func.makerandlst()
# 3
lst = [20, 1, 12, 9, 18]
func.printmul(lst)
# 4
lst = [i for i in range(1, 11)]
func.makelist(lst)
print(lst)
# 5
lst = ['aba', 'xyz', 'abc', '121']
func.chackfe(lst)
# 6
lst_1 = [i for i in range(1, 7)]
lst_2 = [i for i in range(6, 11)]
func.chackdup(lst_1, lst_2)
# 7
func.lirancho()
# 8
lst_1 = [x for x in range(1, 6)]
lst_2 = [x for x in range(1, 8)]
lst_2[1] = 3
func.printdup(lst_1, lst_2)
# 9
screen = turtle.Screen()
t = turtle.Turtle()
lst = [x for x in range(10, 121, 10)]
func.growline(lst, t)
# 10
screen = turtle.Screen()
t = turtle.Turtle()
x = y = 50
for c in ["yellow", "red", "purple", "blue"]:
func.draw_square(x, y, c, t)
turtle.done()
# 11
window = turtle.Screen()
one = turtle.Turtle()
two = turtle.Turtle()
func.dice_run(one, two)
turtle.done()
# 12
lst = [[['#' for _ in range(5)] for _ in range(4)] for _ in range(3)]
print(lst)
# 13
func.view_seat()
# 14
func.make_bombmap()
# 15
lst = [1, 1, 0, 0, 1, 0, 1, 1, 1, 0]
func.roolet(lst)
# 16
func.left_prime(100)