Unit 10-12. 리스트, 튜플, 딕셔너리

Joy·2020년 2월 28일
0

10. List and Tuple

리스트 [ ]

리스트 = [값, 값, 값]

문자열, 정수, 실수, 불 등 모든 자료형을 저장 (섞어서도 저장 가능)
,(콤마)로 구분

빈 리스트

리스트 = []
리스트 = list()

보통 빈 리스트를 만들어 놓은 뒤에 새 값을 추가하는 방식으로 사용

range로 리스트

range: 연속된 숫자 생성

range(시작숫자, 미포함숫자)

리스트 = list(range(횟수))
리스트 = list(range(시작, 끝, 증가폭))

>>> a = list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> c = list(range(-4, 10, 2))
>>> c
[-4, -2, 0, 2, 4, 6, 8]

튜플 ( )

리스트처럼 요소를 일렬로 저장하지만, 안에 저장된 요소를 변경, 추가, 삭제를 할 수 없음. 읽기 전용 리스트
튜플도 리스트처럼 여러 자료형을 섞어서 저장가능

튜플 = (값, 값, 값)
튜플 = 값, 값, 값

요소가 하나인 튜플

함수(클래스)를 사용하다 보면 값이 아닌 튜플을 넣어야 할 경우가 있음.
이때 값이 하나지만 튜플 넣어야 할때 활용 가능

튜플 = (값, )
튜플 = 값,

range 로 튜플

튜플 = tuple(range(횟수))
튜플 = tuple(range(시작, 끝))
튜플 = tuple(range(시작, 끝, 증가폭))

튜플 ~ 리스트 바꾸기

tuple() , list() 함수 활용

리스트와 튜플로 변수 만들기

변수의 개수와 리스트(튜플)의 요소 개수는 같아야 함

>>> a, b, c = [1, 2, 3]
>>> print(a, b, c)
1 2 3
>>> d, e, f = (4, 5, 6)
>>> print(d, e, f)
4 5 6

리스트 패킹(list packing)과 튜플 패킹(tuple packing)

변수에 리스트 또는 튜플을 할당

a = [1, 2, 3]    # 리스트 패킹
b = (1, 2, 3)    # 튜플 패킹
c = 1, 2, 3      # 튜플 패킹

리스트와 튜플 변수로도 변수 여러 개 가능
:리스트 언패킹(list unpacking), 튜플 언패킹(tuple unpacking)

>>> x = [1, 2, 3]
>>> a, b, c = x
>>> print(a, b, c)
1 2 3
>>> y = (4, 5, 6)
>>> d, e, f = y
>>> print(d, e, f)
4 5 6

심사문제: range로 튜플 만들기

표준 입력으로 정수가 입력됩니다. range의 시작하는 숫자는 -10, 끝나는 숫자는 10이며 입력된 정수만큼 증가하는 숫자가 들어가도록 튜플을 만들고, 해당 튜플을 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다).

number = int(input())
print(tuple(range(-10, 10, number)))

11. sequence types

리스트, 튜플, range, 문자열처럼 값이 연속적으로 이어진 자료형

시퀀스 자료형으로 만든 객체를 시퀀스 객체라고 하며, 시퀀스 객체에 들어있는 각 값을 요소(element)

값 확인

불리언으로 나옴

값 in 시퀀스객체
값 not in 시퀀스객체

객체 잇기

값 not in 시퀀스객체

주의: range는 + 연산자로 객체를 연결할 수 없음 > 리스트 또는 튜플로 만들어서 연결
문자열은 + 연산자로 여러 문자열을 연결

문자열에 숫자 연결: 숫자를 str()함수로 문자열로 바꿔서 연결

객체 반복

시퀀스객체 정수
정수
시퀀스객체

요소 개수 구하기

len(시퀀스객체)

문자열 길이 구하기

len(문자열)

공백까지 포함, 따옴표는 제외

요소에 접근 - 인덱스 활용

시퀀스객체[인덱스]

range도 접근 가능

>>> r = range(0, 10, 2)
>>> r[2]        # range의 세 번째(인덱스 2) 요소 출력
4

*** 시퀀스 객체에서 를 사용하면 실제로는 getitem 메서드를 호출

>>> a = [38, 21, 53, 62, 19]
>>> a.__getitem__(1)
21

음수 인덱스 -n

뒤에서 ㅜ번째
마지막 요소 접근할 때 : -1

요소에 값 주기

시퀀스객체[인덱스] = 값

* 튜플의 [ ]에 인덱스를 지정한 뒤 값을 할당하면 에러 >>> 튜플은 요소 변경 불가
튜플, range, 문자열은 읽기 전용**

요소 삭제

del 시퀀스객체[인덱스]

슬라이스

시퀀스객체[시작인덱스:끝인덱스]

슬라이스를 했을 때 실제로 가져오는 요소는 시작 인덱스부터 끝 인덱스 - 1까지

>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[0:4]     # 인덱스 0부터 3까지 잘라서 새 리스트를 만듦
[0, 10, 20, 30]

시퀀스객체[시작인덱스:끝인덱스:인덱스증가폭]

>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> a[2:8:3]    # 인덱스 2부터 3씩 증가시키면서 인덱스 7까지 가져옴
[20, 50]

시퀀스객체[:끝인덱스]

처음부터 끝까지

시퀀스객체[시작인덱스:]

시퀀스객체[:]
시퀀스객체[::]

전체리스트

시퀀스객체[::증가폭]

del로 슬라이스 삭제하기

del 시퀀스객체[시작인덱스:끝인덱스

>>> a = [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> del a[2:5]    # 인덱스 2부터 4까지 요소를 삭제
>>> a
[0, 10, 50, 60, 70, 80, 90]

심사문제: 리스트의 마지막 부분 삭제하기

표준 입력으로 숫자 또는 문자열 여러 개가 입력되어 리스트 x에 저장됩니다(입력되는 숫자 또는 문자열의 개수는 정해져 있지 않음). 다음 소스 코드를 완성하여 리스트 x의 마지막 요소 5개를 삭제한 뒤 튜플로 출력되게 만드세요.

del x[-5:]
print(tuple(x))

1.시퀀스 객체는 인덱스에 음수를 지정하면 뒤에서부터 요소에 접근
인덱스에 -5를 지정하면 뒤에서 5번째 요소에 접근
슬라이스를 사용하여 시작 인덱스를 -5으로 지정하고, 끝 인덱스를 생략하면 리스트의 마지막 요소 5개에 접근
2.리스트 x를 tuple에 넣은 뒤 print로 출력

심사문제: 문자열에서 인덱스가 홀수인 문자와 짝수인 문자 연결하기

표준 입력으로 문자열 두 개가 각 줄에 입력됩니다(문자열의 길이는 정해져 있지 않음). 첫 번째 문자열에서 인덱스가 홀수인 문자와 두 번째 문자열에서 인덱스가 짝수인 문자를 연결하여 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다). 연결 순서는 첫 번째 문자열, 두 번째 문자열 순입니다. 그리고 0은 짝수로 처리합니다.

a = input()
b = input()
print( a[1::2] + b[0::2]   )

12. Dictionary

딕셔너리: 연관된 값을 묶어서 저장하는 용도 자료형

딕셔너리 = {키1: 값1, 키2: 값2 }
딕셔너리 = {}
딕셔너리 = dict()

키가 중복되지 않게 주의.

함수로 만들기도 가능

딕셔너리 = dict(키1=값1, 키2=값2)
딕셔너리 = dict(zip([키1, 키2], [값1, 값2]))
딕셔너리 = dict([(키1, 값1), (키2, 값2)])
딕셔너리 = dict({키1: 값1, 키2: 값2})

딕셔너리에 접근하기

딕셔너리[키]

키에 값 할당

딕셔너리[키] = 값

키가 있는지 확인 : 연산지 in 사용

키 in 딕셔너리
키 not in 딕셔너리

키 개수 구하기

len(딕셔너리)

12.5 심사문제: 딕셔너리에 게임 캐릭터 능력치 저장하기

표준 입력으로 문자열 여러 개와 숫자(실수) 여러 개가 두 줄로 입력됩니다. 입력된 첫 번째 줄은 키, 두 번째 줄은 값으로 하여 딕셔너리를 생성한 뒤 딕셔너리를 출력하는 프로그램을 만드세요.

x = input().split()
y = map(float, input().split())
dic = dict(zip(x, y))
print(dic)
profile
roundy

0개의 댓글