<튜플이 각 아이템으로 이루어진 리스트 만들어보기>
albums = [("Welcome", "Alice Cooper", 1995),
("Bad House", "Bad123", 1922),
("Ride the horse", "Farmers", 2009),
]
print(len(albums))
for name, artist, year in albums: #아래 방식 말고 이방식이 더 선호됨!
print("Album: {}, Artist: {}, Year: {}"
.format(name, artist, year))
for album in albums: #위에것 보다 비효율적인 방법임
name, artist ,year = album
print("Album: {}, Artist: {}, Year: {}"
.format(name, artist, year))
*참고: 리스트도 sequence 타입이기 때문에 unpacking이 가능함 하지만 튜플과 달리 리스트 타입은 아이템이 변경 가능하기 때문에 언팩킹 아이템 숫자가 맞지 않으면 crash됨. 튜플은 언제든지 항상 언팩킹을 성공적으로 실행함. 아이템 변경 불가하니 항상 몇 개 아이템을 언팩할지 알수 있음. 다른 sequence 타입을 언팩킹하것보다 튜플 언팩킹이 따라서 더 통용되는 편임.
albums = [
("Hit Songs", "Big Bang", 2016,
[
(1, "거짓말"),
(2, "하루하루"),
(3, "마지막 인사"),
]
),
("Revisited Idol", "Brave Girls", 2017,
[
(1, "롤린"),
(2, "운전만해"),
(3, "Help Me"),
]
),
("Great Music", "the 1975", 2016,
[
(1, "Chocolate"),
(2, "Sound"),
(3, "Robbers"),
]
),
]
위는 다소 복잡하게 들리겠지만 "튜플을 품은 리스트를 품은 튜플을 품은 리스트"의 구조를 띄고 있음. 경우의 수에 맞게 위와 같은 구조가 굉장히 복잡하게 펼쳐질 수 있음.
앨범내 정보 같은 경우는 해당 데이터가 변경될 확률이 극히 적기 때문에 기본 정보 컨테이너로 튜플을 채택함.
<sound = albums[2][3][1][1], print(sound)> 의 형태로 내부의 세부 정보를 깊게 탐색하여 선택할 수 있음 = 다중괄호 구조!
위 구조를 nested_datasample.py로 따로 저장후 활용하면 아래의 쥬크 박스형태의 작은 프로그램을 만드는게 가능해짐.
from nested_datasample import albums
SONGS_LIST_INDEX = 3
SONG_TITLE_INDEX = 1
while True:
print("please choose your album (invalid choice exits): ")
for index, (title, artist, year, songs) in enumerate(albums):
print("{}: {}".format(index + 1, (title)))
choice = int(input())
if 1 <= choice <= len(albums):
songs_list = albums[choice -1][SONGS_LIST_INDEX]
else:
break
print("Please choose your song: ")
for index, (track_number, song) in enumerate(songs_list):
print("{}: {}".format(index +1, song))
song_choice = int(input())
if 1 <= song_choice <= len(songs_list):
title = songs_list[song_choice -1][SONG_TITLE_INDEX]
else:
break
print("-" * 40)
print("Playing {}".format(title))
print("-" * 40)
위 소스코드 결과값 예시는 아래와 같음.
input값 = 1, 2
please choose your album (invalid choice exits):
1: Hit Songs
2: Revisited Idol
3: Great Music
1
Please choose your song:
1: 거짓말
2: 하루하루
3: 마지막 인사
2
----------------------------------------
Playing 하루하루
----------------------------------------