List

순서가 있는 데이터의 집합입니다.

List

중학교 수학책 가장 처음에 나오는 집합을 기억하시죠? 특정 값들의 묶음을 리스트(List)라고 생각하시면 됩니다. 리스트는 내가 원하는 것들을 묶어두고 필요할 때 추가, 삭제, 읽기, 수정이 가능합니다.

만들기

list = [1, 5, 3, 6]
stringList = ['Hi', 'Hello', 'Hey']
combineList = [1, 'Hello', 3, 'Hi']
inList = [1, 3, ['Hi', 'Hello']]

리스트는 대괄호([ ])를 사용하고 내부 요소들은 쉼표(,)를 이용해 구분하게 됩니다.

사용하기

읽기

전체 값 출력

list = [1, 5, 3, 6]
print(list)

특정 위치의 값

list = [1, 5, 3, 6]
print(list[1])

list의 1번째 값을 출력하도록 했습니다. 결과는 5가 출력됩니다. 왜 그런지 알아보죠. 리스트는 아래와 같은 구성으로 되어있습니다.

list의 값

1

5

3

6

순서

1번

2번

3번

4번

인덱스 or 포지션 or 위치

0

1

2

3

마이너스 인덱스

-4

-3

-2

-1

list[인덱스]를 사용하게 되면 list의 인덱스 위치의 값이 반환됩니다. list[1]의 값을 출력했을 때 위치 1번이 아닌 인덱스 1 위치의 5값이 출력됩니다.

list = [1, 5, 3, 6]
print(list[-1])

인덱스는 -(마이너스) 값을 사용할 수 있습니다. 위의 결과는 6이 출력됩니다.

여려 값 동시에 가져오기

list = [1, 5, 3, 6]
print(list[2:4])

여러 값을 가져오기 위해서 [2:4]라고 적었습니다. 2시작 지점의 인덱스 (2 이상) : 4 끝점의 인덱스(4 미만) 2, 3 인덱스의 값을 가져오게 됩니다.

list = [1, 5, 3, 6]
print(list[2:])

앞서 내용과 다른점은 2: 이후 어디까지 인지 위치 값이 없습니다. 2 이상 끝까지 값을 가져옵니다.

list = [1, 5, 3, 6]
print(list[:2])

설명 안해도 느낌 오죠?

수정

list = [1, 5, 3, 6]
list[0] = 10
print(list)

02 list의 0번째 값을 10으로 변경

리스트의 첫 번째 값이 10으로 변경된것을 확인할 수 있습니다. 리스트의 값을 어려개 가져올수 있는 것처럼 어려개를 동시에 변경할 수 있습니다.

list = [1, 5, 3, 6]
list[0:2] = [10, 50]
print(list)

02 리스트의 0, 1번 째 값을 10, 50 으로 변경

[0:2]는 0 이상 2 미만의 위치라고 이야기 드렸죠. 그럼 우리는 0번과 1번의 값을 10, 50으로 변경하게 됩니다.

!!조심할점

list = [1, 5, 3, 6]
list[0:2] = [10, 50, 40, 60]
print(list)

출력을 해보면 예상과 다르게 나올것 입니다. 0~1번 째까지는 값이 변경되고 이후 값은 추가가 됩니다. 어려개를 변경할 때는 인덱스와 추가하는 값을 잘 확인하셔야 합니다.!!

추가

추가는 List에 만들어져 있는 append, insert 함수를 이용합니다.

젤 뒤에 추가

list = [1, 5, 3, 6]
list.append(8)
print(list)

원하는 위치에 추가

지금까지 1,5, 3, 6 의 리스트를 사용해왔습니다. 5, 3 사이에 4 값을 추가하겠습니다.

list = [1, 5, 3, 6]
list.insert(2, 4)
print(list)

02 insert 함수는 insert(인덱스, 값) 으로 구성됩니다.

5와 3 사이는 인덱스 1, 2 입니다. 5와 3사이에 4값을 추가 하기위해서는 인덱스 2번에 4 값을 추가해야 겠죠.

삭제

위치 값 이용

원하는 위치의 값을 삭제합니다. 젤 처음 1의 값을 삭제하겠습니다.

list = [1, 5, 3, 6]
del list[0]
print(list)

02 del list[0] del 명령어를 이용해 list의 0번째 값을 삭제 했습니다.

요소 값 이용

3번 값을 삭제하고 싶은데 리스트가 아주 길다면 눈으로 위치를 찾는거는 쉽지 않을 것 입니다. 이때 사용할 수 있습니다.

list = [1, 5, 3, 6]
list.remove(3)
print(list)

02 list 내부 값 중에 3을 삭제 만약에 리스트에 3값이 어려개가 있는 경우 첫 번째 것만 삭제 됩니다.

list = [1, 5, 3, 6, 3]
list.remove(3)
print(list)

알아두면 편한 함수

갯수 구하기

list = [1, 5, 3, 6, 3]
print(len(list))

값의 위치 가져오기

list = [1, 5, 3, 6, 3]
print(list.index(3))

정렬(Sort)

list = [1, 5, 3, 6, 3]
list.sort()
print(list)

역순정렬

list = [1, 5, 3, 6, 3]
list.sort(reverse=True)
print(list)

역순 (Reverse)

list = [1, 5, 3, 6, 3]
list.reverse()
print(list)

값을 가져오며 삭제하기

list = [1, 5, 3, 6, 3]
popValue = list.pop()
print(popValue)
print(list)

02 리스트 제일 뒤 값을 가져오며 리스트에서 삭제한다.

list = [1, 5, 3, 6, 3]
popValue = list.pop(0)
print(popValue)
print(list)

02 리스트의 제일 처음 값을 가져오며 리스트에서 삭제한다.

리스트 합치기

list = [1, 5, 3, 6, 3]
listExtends = ['hi', 'hello']
list.extend(listExtends)
print(list)

예제 1 다음과 같은 리스트가 있다.

list = [1, 3, 5, 7, 9, 11]

리스트를 이용해서 값 1을 구하세요. 몇 가지 방법이 있을까요?

참고 코드
list = [1, 3, 5, 7, 9, 11]
print(list[0])
print(list[3] - list[0] - list[0])
print(list[4] - list[1] + list[2])

예제2 다음과 같은 리스트가 있다.

list1 = [1, 3, 5, 7, 9]
list2 = [2, 4, 6, 8]

1,2,3,4,5,6,7,8,9 를 출력하세요. 가능한 많은 방법을 찾아보세요.

참고 코드
list1 = [1, 3, 5, 7, 9]
list2 = [2, 4, 6, 8]

list3 = list1 + list2
list3.sort()
print(list3)

list1.extend(list2)
list1.sort()
print(list1)

list3 = []
list3.append(list1[0])
list3.append(list2[0])
list3.append(list1[1])
list3.append(list2[1])
list3.append(list1[2])
list3.append(list2[2])
print(list3)

예제3 어느 식당에 갔다. 음식을 주문하려고 메뉴판을 보니

T1

소고기 쌀국수

7,000원

T2

소고기 매운쌀국수

7,500원

P1

파인애플 볶음밥

8,000원

P2

해물볶음면

8,500원

Q1

월남쌈

12,000원

주문을 T1, P2을 했을 때 총 가격은 얼마인가요? 주문은 다양하게 변화 할 수 있습니다.

참고 코드
#입력받는다.
user_order = input('주문 하세요.')
if(user_order == 'Menu') :
    print("T1, 소고기 쌀국수     7,000원")
    print("T2, 소고기 매운쌀국수  7,000원")
    print("P1, 파인애플 볶음밥   7,000원")
    print("P1, 해물볶음면       7,000원")
    print("Q1, 월남쌈          7,000원")
    user_order = input('주문 하세요.')
# "T1,P1,q1" 문자열
#입력받은 것을 자른다(,)
orders = user_order.lower().split(',')
#[t1, p1, q1]
#입력받은 주문이 몇개인지 확인한다.
count = len(orders);
#3
#입력받은 주문의 가격이 얼마인지 구한다.
price = [7000, 7500, 8000, 8500, 12000]
menu = ['t1', 't2', 'p1', 'p2', 'q1']
#주문의 가격을 모두 더한다.
if(count == 1) :
    price_pos = menu.index(orders[0])
    print(price[price_pos])
elif(count == 2):
    price_pos = menu.index(orders[0])
    price_pos1 = menu.index(orders[1])
    print(price[price_pos] + price[price_pos1])
elif(count == 3):
    price_pos = menu.index(orders[0])
    price_pos1 = menu.index(orders[1])
    price_pos2 = menu.index(orders[2])
    print(price[price_pos] + price[price_pos1]+ price[price_pos2])
else:
    print('1111')

예제 4 입력값 0이 아닌 경우 내용을 계속 입력받고, 0을 입력하면 이전 입력값을 하나식 보여주도록 하세요. 999입력 시 종료, 998 입력 시 남아있 값 출력 ex) 사용자 입력 >> 1 >> 123 >> 23 >> 4 >> 234 >>0 234 >>0 4 >>55555 >>0 55555 >>0 23

참고 코드
# -*- coding: UTF-8 -*-
tong = []
while True:
    userInput = input('숫자를 입력해주세요!!! (0: 이전 값 출력, 998:전체 출력, 999: 종료) : ')
    if(not userInput.isnumeric()):
        print('숫자만 입력해주세요!!')
        continue
    userInput = int(userInput)
    if(userInput == 0):  
        if(not tong):
            print('데이터가 없습니다.')
            continue
        popValue = tong.pop()
        print(popValue)
    elif(userInput == 998):
        print(tong)
    elif(userInput == 999):
        print('종료합니다 !!')
        break;
    else:
        tong.append(userInput)
        print(tong[(len(tong)-1)])

Last updated