List
중학교 수학책 가장 처음에 나오는 집합을 기억하시죠?
특정 값들의 묶음을 리스트(List)라고 생각하시면 됩니다.
리스트는 내가 원하는 것들을 묶어두고 필요할 때 추가, 삭제, 읽기, 수정이 가능합니다.
만들기
Copy list = [ 1 , 5 , 3 , 6 ]
stringList = [ 'Hi' , 'Hello' , 'Hey' ]
combineList = [ 1 , 'Hello' , 3 , 'Hi' ]
inList = [ 1 , 3 , [ 'Hi' , 'Hello' ]]
리스트는 대괄호([ ])를 사용하고 내부 요소들은 쉼표(,)를 이용해 구분하게 됩니다.
사용하기
읽기
전체 값 출력
Copy list = [1, 5, 3, 6]
print(list)
특정 위치의 값
Copy list = [1, 5, 3, 6]
print(list[1])
list의 1번째 값을 출력하도록 했습니다.
결과는 5가 출력됩니다. 왜 그런지 알아보죠.
리스트는 아래와 같은 구성으로 되어있습니다.
list[인덱스]를 사용하게 되면 list의 인덱스 위치의 값이 반환됩니다.
list[1]의 값을 출력했을 때 위치 1번이 아닌 인덱스 1 위치의 5값이 출력됩니다.
Copy list = [ 1 , 5 , 3 , 6 ]
print (list[ - 1 ])
인덱스는 -(마이너스) 값을 사용할 수 있습니다.
위의 결과는 6이 출력됩니다.
여려 값 동시에 가져오기
Copy list = [ 1 , 5 , 3 , 6 ]
print (list[ 2 : 4 ])
여러 값을 가져오기 위해서 [2:4]라고 적었습니다.
2시작 지점의 인덱스 (2 이상) : 4 끝점의 인덱스(4 미만)
2, 3 인덱스의 값을 가져오게 됩니다.
Copy list = [ 1 , 5 , 3 , 6 ]
print (list[ 2 :])
앞서 내용과 다른점은 2: 이후 어디까지 인지 위치 값이 없습니다.
2 이상 끝까지 값을 가져옵니다.
Copy list = [ 1 , 5 , 3 , 6 ]
print (list[: 2 ])
설명 안해도 느낌 오죠?
수정
Copy list = [1, 5, 3, 6]
list[0] = 10
print(list)
02 list의 0번째 값을 10으로 변경
리스트의 첫 번째 값이 10으로 변경된것을 확인할 수 있습니다.
리스트의 값을 어려개 가져올수 있는 것처럼 어려개를 동시에 변경할 수 있습니다.
Copy 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으로 변경하게 됩니다.
!!조심할점
Copy list = [ 1 , 5 , 3 , 6 ]
list [ 0 : 2 ] = [ 10 , 50 , 40 , 60 ]
print ( list )
출력을 해보면 예상과 다르게 나올것 입니다.
0~1번 째까지는 값이 변경되고 이후 값은 추가가 됩니다.
어려개를 변경할 때는 인덱스와 추가하는 값을 잘 확인하셔야 합니다.!!
추가
추가는 List에 만들어져 있는 append, insert 함수를 이용합니다.
젤 뒤에 추가
Copy list = [ 1 , 5 , 3 , 6 ]
list . append ( 8 )
print ( list )
원하는 위치에 추가
지금까지 1,5, 3, 6 의 리스트를 사용해왔습니다. 5, 3 사이에 4 값을 추가하겠습니다.
Copy list = [ 1 , 5 , 3 , 6 ]
list . insert ( 2 , 4 )
print ( list )
02 insert 함수는 insert(인덱스, 값) 으로 구성됩니다.
5와 3 사이는 인덱스 1, 2 입니다.
5와 3사이에 4값을 추가 하기위해서는 인덱스 2번에 4 값을 추가해야 겠죠.
삭제
위치 값 이용
원하는 위치의 값을 삭제합니다.
젤 처음 1의 값을 삭제하겠습니다.
Copy list = [ 1 , 5 , 3 , 6 ]
del list [ 0 ]
print ( list )
02 del list[0] del 명령어를 이용해 list의 0번째 값을 삭제 했습니다.
요소 값 이용
3번 값을 삭제하고 싶은데 리스트가 아주 길다면 눈으로 위치를 찾는거는 쉽지 않을 것 입니다.
이때 사용할 수 있습니다.
Copy list = [ 1 , 5 , 3 , 6 ]
list . remove ( 3 )
print ( list )
02 list 내부 값 중에 3을 삭제
만약에 리스트에 3값이 어려개가 있는 경우 첫 번째 것만 삭제 됩니다.
Copy list = [ 1 , 5 , 3 , 6 , 3 ]
list . remove ( 3 )
print ( list )
알아두면 편한 함수
갯수 구하기
Copy list = [ 1 , 5 , 3 , 6 , 3 ]
print ( len ( list ))
값의 위치 가져오기
Copy list = [ 1 , 5 , 3 , 6 , 3 ]
print ( list . index ( 3 ))
정렬(Sort)
Copy list = [ 1 , 5 , 3 , 6 , 3 ]
list . sort ()
print ( list )
역순정렬
Copy list = [ 1 , 5 , 3 , 6 , 3 ]
list . sort (reverse = True )
print ( list )
역순 (Reverse)
Copy list = [ 1 , 5 , 3 , 6 , 3 ]
list . reverse ()
print ( list )
값을 가져오며 삭제하기
Copy list = [ 1 , 5 , 3 , 6 , 3 ]
popValue = list . pop ()
print (popValue)
print ( list )
02 리스트 제일 뒤 값을 가져오며 리스트에서 삭제한다.
Copy list = [ 1 , 5 , 3 , 6 , 3 ]
popValue = list . pop ( 0 )
print (popValue)
print ( list )
02 리스트의 제일 처음 값을 가져오며 리스트에서 삭제한다.
리스트 합치기
Copy list = [ 1 , 5 , 3 , 6 , 3 ]
listExtends = [ 'hi' , 'hello' ]
list . extend (listExtends)
print ( list )
문
예제 1
다음과 같은 리스트가 있다.
Copy list = [ 1 , 3 , 5 , 7 , 9 , 11 ]
리스트를 이용해서 값 1을 구하세요. 몇 가지 방법이 있을까요?
Copy 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
다음과 같은 리스트가 있다.
Copy list1 = [1, 3, 5, 7, 9]
list2 = [2, 4, 6, 8]
1,2,3,4,5,6,7,8,9 를 출력하세요. 가능한 많은 방법을 찾아보세요.
Copy 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, P2을 했을 때 총 가격은 얼마인가요?
주문은 다양하게 변화 할 수 있습니다.
Copy #입력받는다.
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
Copy # -*- 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 )])