티스토리 뷰

10명의 친구들이 각각 차를 몰고 서울에서 부산까지 이동한다고 할 때, 1번부터 10번까지 차 10대가 나란히 붙어서 갈 수 있을까요? 아마 처음에는 그럴지 몰라도 이내 순서가 달라지고 다른 차들이랑 뒤섞이게 될 겁니다. 도중에 누구는 화장실을 가야할 수도 있고 휴게소에 들릴 수도 있고 막히는 구간에서는 고속도로가 아닌 국도를 이용하거나 실수로 길을 잘못 들르는 경우도 생길 수 있겠지요. 

 

그런데 만약 기차라면 어떨까요? 서로 다른 열차 칸들이 모두 붙어있으므로 나란히 같은 모습으로 서울에서 부산까지 이동하게 될 겁니다. 출발도 똑같이, 도착도 똑같이 하겠지요. 순서도 그대로 유지가 될 겁니다.

 

변수를 공부할 때 앞에서는 나이, 이름, 취미 등 서로 다른 의미를 지니는 값들을 사용했는데, 만약 관련이 있는 변수들을 사용하려면 어떻게 할까요?

 

기차는 너무 기니까 지하철로 예를 들어보겠습니다.

지하철의 각 칸마다 사람들이 몇 명씩 타고 있는지를 변수를 이용해서 나타내려면 이렇게 할 수 있습니다.

# 지하철 칸별로 10명, 20명, 30명
subway1 = 10
subway2 = 20
subway3 = 30

지금은 3칸밖에 없는데 만약 지하철이 수십 칸이라면 변수도 수십 개가 되어야겠지요. 이 때 우리는 리스트를 이용해서 딱 하나의 이름으로 정의된 지하철을 만들 수가 있습니다.

subway = [10, 20, 30]
print(subway) # [10, 20, 30]

리스트를 사용하는 방법은 대괄호 속에 원하는 값들을 콤마로 구분하여 넣어주면 됩니다. 이렇게 하면 우리는 subway1, subway2, subway3 각각 변수를 사용할 필요 없이 subway 리스트 하나만 가지고 다양한 작업을 할 수 있습니다. 마치 기차에서 안내 방송을 한 번만 하면 열차 내 모든 승객분들이 들을 수 있는 것처럼요.

 

숫자 말고 문자열도 동일한 방법으로 사용할 수 있어요. 무한도전 멤버분들이 지하철 각 칸에 한 명씩 타고 있다고 해볼까요?

subway = ["유재석", "조세호", "박명수"]
print(subway) # ['유재석', '조세호', '박명수']

이 때 조세호씨가 몇 번째 칸에 있는지 확인하려면 문자열 처리에서 배웠던 것과 같이 index() 함수를 이용하면 됩니다.

# 조세호씨가 몇 번째 칸에 타고 있는가?
print(subway.index("조세호")) # 1 (인덱스는 0부터 시작한다는 것, 기억나시죠?)

다음 역에서 하하 씨가 지하철에 탄다고 하면, 리스트에서는 append() 함수를 쓸 수 있어요. append() 는 리스트의 맨 마지막에 데이터를 추가하는 역할을 한답니다.

# 하하씨가 다음 정류장에서 다음 칸에 탐
subway.append("하하")
print(subway) # ['유재석', '조세호', '박명수', '하하']

이번에는 정형돈씨를 유재석씨와 조세호씨 사이에 끼워볼까요? 인덱스 값을 이용해서 중간에 삽입도 가능해요. 참고로 인덱스를 0으로 하면 리스트 맨 앞에, 즉 유재석씨 앞에 삽입이 됩니다.

# 정형돈씨를 유재석 / 조세호 사이에 태움
subway.insert(1, "정형돈") # 인덱스 1 위치에 삽입
print(subway) # ['유재석', '정형돈', '조세호', '박명수', '하하']

예제에서는 인덱스를 1로 해서 조세호 씨의 위치에 정형돈씨를 집어 넣게 된 것이죠.

 

역에 도착할 때마다 한명씩 지하철에서 내린다고 하겠습니다. 리스트에서는 pop() 을 이용해서 맨 뒤에 있는 데이터를 하나씩 뺄 수 있어요. 이해를 돕기 총 3번 pop() 을 하는 동안 리스트가 어떻게 바뀌는지 확인해주세요.

# 지하철에 있는 사람을 한 명씩 뒤에서 꺼냄
print(subway.pop()) # 하하 내림
print(subway) # ['유재석', '정형돈', '조세호', '박명수']

print(subway.pop()) # 박명수 내림
print(subway) # ['유재석', '정형돈', '조세호']

print(subway.pop()) # 조세호 내림
print(subway) # ['유재석', '정형돈']

 

지금 지하철에 같은 이름의 승객이 몇 명 타고 있는지, 즉 리스트 내에 같은 값이 몇 번 사용되었는지도 볼 수 있어요. 문자열 때와 동일하게 count() 를 쓰면 됩니다.

# 같은 이름의 사람이 몇 명 있는지 확인
subway.append("유재석") # 설명을 위해 유재석씨를 맨 뒤에 태울게요
print(subway) # ['유재석', '정형돈', '유재석']
print(subway.count("유재석")) # 유재석씨가 2명이 있네요!

 

예제를 조금 바꾸어서 숫자로 구성된 리스트를 하나 만들어볼게요.

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

이렇게 1부터 5사이의 숫자들이 뒤섞여 있을 때 sort() 함수를 이용하면 오름차순으로 정렬을 할 수 있습니다.

num_list.sort() # 정렬
print(num_list) # [1, 2, 3, 4, 5]

정렬된 리스트의 순서를 reverse() 를 이용하여 거꾸로 뒤집을 수도 있구요.

num_list.reverse() # 순서 뒤집기
print(num_list) # [5, 4, 3, 2, 1]

데이터가 더 이상 필요 없다 그러면 clear() 를 통해 리스트 내의 데이터를 모두 지울 수도 있어요.

# 모두 지우기
num_list.clear()
print(num_list) # []

리스트에는 꼭 숫자끼리, 문자열끼리 데이터를 넣을 필요는 없어요. 정수형, 실수형, 문자열, boolean 형, 심지어 리스트도 집어 넣을 수 있답니다.

mix_list = ["조세호", 20, True] # 다양한 자료형을 함께 사용할 수 있어요
print(mix_list) # ['조세호', 20, True]

그리고 서로 다른 리스트들을 확장할 수도 있습니다. 위에서 num_list 는 clear() 를 통해 데이터를 삭제했으니, 다시 리스트를 정의하고 mix_list 와 합쳐볼까요?

num_list = [5, 2, 4, 3, 1] # num_list 값 다시 정의
num_list.extend(mix_list) # 리스트 확장
print(num_list) # [5, 2, 4, 3, 1, '조세호', 20, True]

연관된 데이터들을 마치 지하철처럼 서로 묶어서 한 번에 관리할 수 있는 리스트에 대해 공부해보았습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함