7  리스트(list)와 튜플(tuple) 시퀀스

이 장에서는 리스트(list)와 튜플(tuple)을 다룬다. 둘 모두 파이썬의 기본 시퀀스 타입이다.

7.1 리스트(list) 만들기

리스트 리터럴은 [] 안에 값들을 콤마(,)로 분리하여 넣어 만든다. 값들은 어떤 타입이든 상관없으며, 서로 다른 타입의 값들도 하나의 리스트에 포함될 수 있다.

# 빈 리스트 생성
my_list = [] 
print(my_list)
[]
my_list = [1, 3, 4, 5, "a", "b", "c", "d", True, False]
print(my_list)
[1, 3, 4, 5, 'a', 'b', 'c', 'd', True, False]

list() 함수를 사용해서 만들 수도 있다. 이 함수를 사용할 때 주의할 것은 인자가 없으면 빈 리스트를 만들고, 인자를 줄 때 값들을 모든 하나의 iterable로 주어야 한다는 점이다.

print(list())
print(list((1, 2, 3)))
print(list("abc"))
print(list([4, 5, 6]))
[]
[1, 2, 3]
['a', 'b', 'c']
[4, 5, 6]
중요

list() 함수는 주어진 iterable을 가지고 메모리에 실제화된 값을 만들 때 사용하는 경우가 많다(materialize).

print(range(10))
print(list(range(10)))
range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

어떤 iterable이 있을 때 이것을 리스트로 만들 때 가장 잘 활용되는 방법은 list comprehension이다. 이 방법은 반드시 알고 있어야 한다.

[x ** 2 for x in range(10) if x % 2 == 0]
[0, 4, 16, 36, 64]

7.2 리스트는 시퀀스(Sequence)의 한 종류

리스트는 Sequence의 한 종류이기 때문에 앞 장에서 설명한 Sequence의 내용이 모두 적용된다. 그래서 5에서 설명한 내용을 리스트에 적용할 수 있다.

my_list = [1, 2, 3, 4, 5]

# 인덱싱
print(my_list[0])
print(my_list[-1])

# 슬라이싱
print(my_list[1:3])  
print(my_list[:3])  
print(my_list[3:])  

# concatenation
print(my_list + [6, 7])  

# repetition
print(my_list * 2) 
1
5
[2, 3]
[1, 2, 3]
[4, 5]
[1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
list1 = [1, 2, 3, 4]
list2 = ["a", "b", "c", "d"]
print(list(zip(list1, list2)))
for item in zip(list1, list2):
    print(item)
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]
(1, 'a')
(2, 'b')
(3, 'c')
(4, 'd')
my_list = ["a", "b", "c", "d"]
list(enumerate(my_list))
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]