이번엔 3장 Introducing Lists에 대해 배워보도록 하자. 저번 장의 피드백을 토대로 내용을 다시 정리해보려고 한다. 이번엔 핵심 단어나 문장 위주로 내가 이해한대로 풀어보려고 한다.

 3장을 시작하기에 앞서 소개글을 읽어보면 저번 장에서 예측했듯이 List에 관해서 소개를 하고 있다. 우리가 기본적으로 알고 있는 List는 여러 개의 데이터가 연결되어 있는 형태로 알고 있는데 여기서도 비슷하게 쓰이지 않을까 싶다. 파이썬의 강력한 기능이라고도 하고 중요한 개념이기도 하고 다른 것들과 묶어서 사용도 많다고 하니까 꽤나 중요한 장이지 않을까 싶다. 그러면 List에 대해서 알아보도록 하자~

 

  • What is a List?

 3장부터는 큼직한 대제목들로만 풀이를 해보려고 한다. 우리는 예전에도 List를 배운 적이 있다.(기억이 난다면....) 흔히 아는 리스트와 예제에서 보이는 리스트가 그렇게 차이가 있어 보이지는 않는다. 예전의 C언어의 리스트를 아래의 예제를 보고 떠올려보기로 하자.

 

int list[5] = {1, 2, 3, 4, 5};
printf(list);

결과
1

 

 우리가 흔히 알고 있는 C언어의 리스트이다. 흔히 배열이라고 많이 불렀는데 미리 데이터 타입을 지정하고 크기도 지정한 다음 그에 맞는 변수를 대입하는 방식으로 사용했다.(물론 나중에는 동적할당, 구조체 등등으로 변형하여 사용도 했지만...^^) 하지만 파이썬에서의 배열? 즉 리스트는 위 코드와 많은 차이점이 있는 것 같다. 아래 예제를 살펴보도록 하자.

 

bicycle = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycle)

결과
['trek', 'cannondale', 'redline', 'specialized']

 

 차이가 많이 느껴지지 않는가? 데이터 타입은 어디갔으며, 크기 지정도 안하고, 심지어 리스트 이름만 출력했을 뿐인데 모든 요소들이 전부 출력된다! 중요한 것은 기존에 쓰던 중괄호{}가 아니라 대괄호[]라는 점을 잘 알고 있어야 한다. 파이썬은 괄호에 따라서 데이터 타입이 여러 개로 나뉘는데 소괄호()는 set, 중괄호{}는 dictionary, 대괄호[]는 list로 나뉘게 된다. 나머지 2개는 뒤에서 배울테니까 넘어가기로 하자. 그리고 대괄호[]만 써서 요소 없이 만들어도 요소 없는 list로 만들어진다.

 저 방식 외에도 리스트를 만드는 다른 방식은 아래 예제를 참고하자.

 

number = list(range(10))			#range(n) : 숫자 n을 0 ~ n-1까지 반환
print(number)

출력
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

 다음은 리스트를 만들었으니 인제 활용할 줄 알아야 한다. 우리가 예전에 배열을 쓰기 위해선 index라는 녀석에게 접근해서 요소를 출력했다. 그러면 파이썬은 다른가? 아니다! 아래 예제를 살펴보고 어떻게 요소에 접근하는지 알아보자.

 

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0])

출력
trek

 

 역시나! 리스트의 첫 번째 요소는 index 0으로 시작한다는 것을 알 수 있다.(아주 중요한 사실이다!) 그러므로 bicycles이 4개의 요소를 가지고 있으므로 리스트의 index는 0, 1, 2, 3를 가지고 있다고 할 수 있다. 반대로 파이썬에서는 새로운 방법으로도 요소에 접근할 수 있는데...

 아래 예제를 살펴보고 어떻게 접근하는지 알아보자.

 

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[-1])

출력
specialized

 

 index값이 보이는가? -1??? 분명히 0, 1, 2, 3밖에 없었는데 -1이라니... 하지만 출력 결과를 보면 제일 마지막 요소가 출력되었다. 그렇다! -1은 제일 마지막 요소를 출력해주는 방법이었다. 반대로 생각해보면 -1은 마지막 요소....그러면 -2는...당연히 마지막에서 두 번째! 즉 역으로 요소들을 출력을 할 수 있다고 생각하면 된다. 얼마나 편리한 기능인가?ㅎㅎ

 

 그러면 list의 특징들에 대해 한 번 정리해보고 기능들을 살펴보러 가자.

  • list의 생성에는 [] or list()를 사용하여 생성한다.
  • list를 생성할 때 요소 없이 만들 수도 있다.
  • list의 index는 0부터 시작하며 역으로 -1부터 출력할 수도 있다.
  • list의 각각의 요소에서는 우리가 알고 있는 method들을 사용할 수 있다.
     - ex) list[0].title(), list[3].lower

 

  • Changing, Adding, and Removing Elements

 다음은 list의 기능들에 대해서 살펴보도록 하자. 제목에서 알 수 있듯이 크게 3가지 기능들을 배울텐데 Changing, Adding, Removing 이 세 가지에 대해서 알아보자~

 

  • Changing

 먼저 Changing을 알아보면 단어 뜻 그대로 요소를 바꾸는 기능을 말한다. 세 가지 기능 중에서 제일 간단한 기능인데 그냥 우리가 아는 요소에 접근해서 변수만 바꾸면 끝난다. 아래 코드를 살펴보고 기능에 대해 이해해보자.(주석 참고)

 

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

출력
['honda', 'yamaha', 'suzuki']

motorcycles[0] = 'ducati'		#motorcycles[0] 요소에 접근하여 'ducati'로 수정
print(motorcycles)

출력
['ducati', 'yamaha', 'suzuki']

 

  • Adding

 그 다음으로 알아볼 기능은 Adding이다. 앞서 배웠던 Changing은 원래 있는 요소를 수정하는 기능이라면 Adding은 없는 요소를 추가하여 list에 포함시키는 기능이다. 앞장에서 배웠던 다양한 method들을 사용하면 쉽게 요소들을 추가 할 수 있다. 책에서는 2개의 method에 대해서 소개하고 있는데 아래 예제를 보고 어떻게 사용하는지 이해해보자.(주석 참고)

 

motorcycles = ['honda']			# list motorcycles 생성
motorcycles.append('yamaha')		# append(x) : 요소의 마지막에 x 변수 추가
motorcycles.append('suzuki')
motorcycles.insert(0, 'ducati')		# insert(n, m) : index n에 m 변수 추가
print(motorcycles)

출력
['ducati', 'honda', 'yamaha', 'suzuki']

 

  • Removing

 마지막으로 제거의 의미를 가지고 있는 Removing이다. 본문이 조금 다른 녀석들보다 길어 보이지만 걱정하지 말고 천천히 읽어보자. 고작 method 3개 밖에 안되는 쉬운 녀석이다. 하나씩 천천히 읽어보고 아래의 코드에서 어떻게 사용하는지 이해해보자.(주석 참고)

 

motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']		# list motorcycles 생성
del motorcycles[0]		# del list[n] : list index n번째 요소 삭제
motorcycles.pop()		# list.pop(n) : list index n번째 요소 삭제(n 생략 시 맨 뒤 요소 삭제)
motorcycles.remove('yamaha')	# list.remove(x) : list의 x 요소 검색 후 삭제
print(motorcycles)

출력
suzuki

 

 추가적으로 Removing 항목에 대해 설명하자면 remove()는 값을 찾아서 삭제하는 method인데 값이 중복이면 어떻게 되는가?에 대한 의문이 생길 수 있다. 결론부터 말하자면 처음으로 찾는 값만 삭제하고 뒤에 중복이 있어도 삭제하지 않고 끝나게 된다. 책에서는 7장에서 또 다룬다고 하니까 이정도만 알고 넘어가기로 하자.

 

 아래 예제는 추가적인 내용이지만 알고 있으면 유용하므로 한 번 살펴보고 넘어가자^^

 

motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']		# list motorcycles 생성
motorcycles[0:3]		# list[n:m] : list index n번째부터 m-1까지 요소 반환
motorcycles[:]			# list[:] : list index 처음부터 마지막까지 전체 요소 반환

응용
motorcycles[:-1]		# 처음부터 마지막 요소 전까지 반환

 

  • Organizing a List

  다음 단원으로는 List에 관련된 몇 가지 method들이 소개되고 있다. 각각의 method들을 책에 나와 있는 예제들을 살펴보고 이해해보도록 하자.

 

  • sort()

 제일 먼저 소개되고 있는 method는 sort()이다. 단어의 뜻만 봐도 '분류', 즉 정렬하는 뜻을 가지고 있고 알고리즘에서도 자주 나오는 단어이다. 단어가 모두 소문자라는 가정 하에 알파벳순으로 정렬을 해주며 한글도 실행해 본 결과 우리가 알고 있는 순서(가나다라마....)에 따라 정렬을 해주는 것 같다. 그러면 아래 예제를 살펴보고 어떻게 쓰이는지 이해해보자.(주석 참고)

 

cars = ['bmw', 'audi', 'toyota', 'subaru', '현대', '기아']
cars.sort()
print(cars)

출력
['audi', 'bmw', 'subaru', 'toyota', '기아', '현대']		//한글보다 영어가 우선순위

cars.sort(reverse=True)		//역순으로 정렬
print(cars)

출력
['현대', '기아', 'toyota', 'subaru', 'bmw', 'audi']

print(sorted(cars))		//출력할 때만 정렬

출력
['audi', 'bmw', 'subaru', 'toyota', '기아', '현대']

 

  • reverse()

 다음 method인 reverse()는 단어 뜻 그대로 '역순'을 의미하며 역순으로 정렬이 되는 것이 아니라 들어 있는 값들을 반대로 정렬하는 기능이다. 그러므로 역순으로 정렬하려면 sort()로 정렬 후 reverse()를 하면 역순 정렬이 된다. 아래 예제를 살펴보고 어떻게 사용하는지 알아보자.(주석 참고)

 

cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.reverse()		//역순 정렬
print(cars)

출력
['subaru', 'toyota', 'audi', 'bmw']

 

  • len()

 마지막 method는 len()이다. '길이'라는 뜻을 가지고 있고 list의 길이를 반환해주는 method이다. len()은 반복문에서도 많이 활용되기 때문에 꼭 숙지하고 있는 편이 좋다. 간단하게 아래 예제를 살펴보고 어떻게 사용하는지 알아보자.(주석 참고)

 

cars = ['bmw', 'audi', 'toyota', 'subaru']
len(cars)		//list cars의 객체 수 반환

결과
4

 

  • Avoiding Index Errors When Working with Lists

 자! 3단원의 마지막인 Index Errors에 관해 설명하고 있다. errors는 저번 장에서와 같이 알고만 있으면 해결하기 쉬우므로 여러 가지 error 해결 방법을 알고 있으면 좋다.(내가 만들고 싶지 않아도 생기는 것이 바로 ERROR...) 아래 예제를 살펴보고 error를 한 줄씩 이해해보자.

 

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles[3])

- 에러 발생 -
1 Traceback (most recent call last):
2 	File "motorcycles.py", line 2, in <module>    
3 		print(motorcycles[3]) 
4 IndexError: list index out of range 

 

  • 1번째 줄 : 에러가 어디서 발생하는지 찾는 메시지
  • 2번째 줄 : 저번 장에서도 나왔듯이 motorcycles.py에서 에러가 발생했고 2번째 line에서 발생
  • 3번째 줄 : 2번째 줄의 확장으로 print(motorcycles[3]에서 에러 발생
  • 4번째 줄 : IndexError가 발생했으며 IndexError는 list의 Index를 잘못 사용(없는 인덱스 or 잘못된 인덱스 값 사용 시 발생)했을 때 발생하는 error

 결국 에러를 전체적으로 이해해보자면 Index 잘못 써서 나는 에러나는 이야기이다. 3이라는 인덱스를 0,1,2밖에 존재하지 않기 때문에 이 셋 중 하나로 고쳐주면 사라지는 에러이다. 에러는 천천히 이해해보면 해결할 수 있기 때문에 당황하지 말고 코드의 오타나 설명을 잘 읽어보자!!!(모르면 구글링!!)

 

 자 인제 3장이 끝이 났다. list의 생성이나 기초적인 method들을 배워봤으며 summary를 읽어 보면 4장은 우리가 기초적으로 배운 list를 더 활용하는 내용이 나오는 것 같다.(예를 들어 더 많은 method나 반복문이 나올 것 같다.) 3장의 내용을 잘 이해하고 4장으로 넘어가서 여러가지 list 활용을 배워보도록 하자!

'Python > No Starch Press_Python' 카테고리의 다른 글

Chapter7. USER INPUT AND WHILE LOOPS  (0) 2020.04.20
Chapter6. DICTIONARIES  (0) 2020.04.17
Chapter5. IF STATEMENTS  (0) 2020.04.10
chapter4. working with lists  (0) 2020.04.10
Chapter2. Variables and simple data types  (2) 2020.03.12
블로그 이미지

Mr.HB

프로그래밍 이야기

,