Run The Bridge

2부 리스트(list) 본문

Python/나의 첫 파이썬

2부 리스트(list)

anfrhrl5555 2021. 9. 15. 16:14
728x90
반응형

0. 들어가기에 앞서

이 책에서 제3장과 4장에서는 리스트(list)가 무엇인지, 리스트의 항목을 어떻게 다루는지 알려준다.

 

list는 코딩을 할 때 매우 많이 쓰므로 잘 배워두면 매우 유용하고 쓸모가 많다. 

 

꼭 list는 마스터하도록 하자!


1. 리스트란

쉽게 말해 특정 순서가 있는 항목의 모음으로 볼 수 있다.

 

0-9의 숫자, 가족 이름, 등 원하는 건 무엇이든지 리스트에 넣을 수 있다.

 

리스트에는 항목이 보통 2개 이상 들어가므로, 리스트 이름은 letters, digits, names처럼 복수형으로 쓴다.

 

# bycycle의 구성요소를 list에 담을 수 있다.
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles)

2. 리스트 항목에 접근하기

근데 이러한 리스트를 우리가 바꾸고 추가할 수 있어야 한다.

 

내가 리스트에 항목을 잘못 넣을 수도 있고 특정 위치의 값을 바꿀수도 있다.

 

리스트의 항목에 접근하기 위해선 인덱스(index)개념을 알아야한다.

 

리스트의 인덱스는 [0]부터 시작한다. 현실의 숫자는 1부터 시작하지만 컴퓨터 메모리는 0번지부터 시작한다.

 

내가 0번째 인덱스를 보고싶으면, print(리스트이름[0]) 이렇게 출력하면 된다.

# 0번째 인덱스 trek를 출력한다.
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0])

----result----
trek

 

물론 출력이외에 0번째 인덱스의 값을 바꾸거나 할 수 있다.

# 0번째 인덱스 trek를 Trek로 출력한다.
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0].title())

물론 변수 bicycles의 값이 바뀐건 아니고 출력만 저렇게 해준다. 실제로 변수에 대입시켜줘야 값이 바뀐다.

 

만약 list의 개수가 너무 많아서 마지막값을 알 수 없을때, python에서는 간편하게 마지막 값을 볼 수 있다.

# [-1]은 뒤에서부터 가져오므로, 제일 마지막 값을 가져온다
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[-1])

3. 리스트 항목 변경, 추가, 제거

# list 항목 변경
motocycles = ['honda', 'yamaha', 'suzuki']
print(motocycles)

motocycles[0] = 'ducati'
print(motocycles)

----result----
['honda', 'yamaha', 'suzuki']
['ducati', 'yamaha', 'suzuki']

list의 0번째 인덱스에 'ducati' 라는 값을 넣어주면 0번째 인덱스가 변경되는 것을 볼 수 있다.

 

list에 append()로 list의 끝에 항목을 추가할 수 있다.

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

motocycles.append('ducati')
print(motocycles)


----result----
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'ducati']

append로 'ducati' 를 추가하니까 끝에 ducati가 추가된 것을 볼 수 있다.

 

list는 값을 담지않고, 빈 리스트를 선언할 수 있는데 다음과같이 활용가능하다.

motocycles = []

motocycles.append('honda')
motocycles.append('yamaha')
motocycles.append('suzuki')

print(motocycles)

----result----
['honda', 'yamaha', 'suzuki']

 

insert()로 리스트 중간에 삽입할 수 있다.

# 0번째 인덱스에 ducati를 넣으면 기존에 honda는 [1]번째 인덱스로 밀려난다.
motocycles = ['honda', 'yamaha', 'suzuki']

motocycles.insert(0, 'ducati')
print(motocycles)

----result----
['ducati', 'honda', 'yamaha', 'suzuki']

 

del 문으로 항목을 제거할 수 있다.

# 0번째 index인 honda를 del문으로 지웠다.
motocycles = ['honda', 'yamaha', 'suzuki']

del motocycles[0]
print(motocycles)

----result----
['yamaha', 'suzuki']

 

또한 pop()으로 항목을 제거할 수 있다. pop에서 빼온 인덱스는 다른 변수에 대입하여 사용할 수 있다.

# pop을 사용해서 suzuki를 빼내고, 그 값을 popped_motocycles에 담았다.
motocycles = ['honda', 'yamaha', 'suzuki']
print(motocycles)

popped_motocycles = motocycles.pop()
print(motocycles)
print(popped_motocycles)

----result----
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki

 

값으로 항목 제거하기

가끔은 리스트에서 제거할 값의 위치를 모를 수 있다. 제거할 항목의 값만 알고 있을 때는 remove() 메서드를 쓸 수 있다.

# remove를 사용해 ducati를 삭제
motocycles = ['honda', 'yamaha', 'ducati', 'suzuki']
print(motocycles)

motocycles.remove('ducati')
print(motocycles)

----result----
['honda', 'yamaha', 'ducati', 'suzuki']
['honda', 'yamaha', 'suzuki']

 

약간의 활용을 하면 다음과같이 쓸 수 있다.

motocycles = ['honda', 'yamaha', 'ducati', 'suzuki']
print(motocycles)

too_expensive = 'ducati'  # ducati가 너무 비싸다.
motocycles.remove(too_expensive)  # 비싼거는 전부 제거해줘
print(motocycles)

----result----
['honda', 'yamaha', 'ducati', 'suzuki']
['honda', 'yamaha', 'suzuki']

내가 삭제하고 싶은 index를 변수에 담고, 그 변수에 remove를 적용시키면 python에서 리스트를 확인하고 remove 시켜준다. 이러면 일일히 지정할 필요없이 삭제시킬 list를 지정해두면 손쉽게 제거할 수 있다.

 

※ 만약 리스트에 같은 값이 여러 개 있다면 remove() 메서드는 첫 번째 항목만 제거합니다. 값을 전부 지우고싶다면 루프를 써야하는데 이 방법은 나중에 배웁니다.


4. 리스트 정리하기

sort()로 리스트 영구 정렬하기

sort() 메서드를 쓰면 비교적 쉽게 리스트를 정렬할 수 있습니다. 다음의 예시와 같습니다.

cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)

----result----
['audi', 'bmw', 'subaru', 'toyota']

sort() 메서드에 매개변수로 reverse=True를 전달하면 리스트를 알파벳 반대 순서로 정렬할 수 있습니다.

cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)

----result----
['toyota', 'subaru', 'bmw', 'audi']

 

리스트의 원래 순서를 유지하면서 정렬된 순서로 표현 혹은 출력만 하려 할 때는 sorted() 함수를 씁니다.

sorted() 함수는 리스트를 특정 순서로 표현하지만, 리스트의 실제 순서는 바뀌지 않습니다.

cars = ['bmw', 'audi', 'toyota', 'subaru']

print("Here is the original list: ")
print(cars)

print("\nHere is the original list: ")
print(sorted(cars))

print("\nHere is the original list again: ")
print(cars)

----result----
Here is the original list: 
['bmw', 'audi', 'toyota', 'subaru']

Here is the original list: 
['audi', 'bmw', 'subaru', 'toyota']

Here is the original list again: 
['bmw', 'audi', 'toyota', 'subaru']

sorted() 함수도 마찬가지로 reverse=True 매개변수를 추가하면 list를 알파벳 반대 순서로 표시할 수 있습니다.

 

아까 sort(reverse=True)는 정렬을 거꾸로 해주는 방법이였는데, reverse() 메서드를 사용하면 리스트를 정렬 하지않고 거꾸로 출력할 수 있습니다.

cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)

cars.reverse()
print(cars)

----result----
['bmw', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bmw']

5. 리스트 길이 구하기

cars = ['bmw', 'audi', 'toyota', 'subaru']
print(len(cars))

----result----
4

len()은 생각보다 유용하게 많이 쓰인다. 사용하기도 쉬우므로 꼭 숙지해놓자!


6. 인덱스 에러 피하기

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

----result----
Traceback (most recent call last):
  File "C:/Users/Student/PycharmProjects/my_first_python_book/frist.py", line 2, in <module>
    print(motocycles[3])
IndexError: list index out of range

위의 코드는 3번째 인덱스를 반환하려 하는데, motocycles 리스트에는 인덱스 3인 항목이 존재하지 않는다.

 

이 에러는 사람들이 리스트의 시작을 1번째로 시작하는줄 알고 발생하는 오류인데 꼭! 파이썬은 0부터 시작한다는 사실을 알고있어야 한다.

 

인덱스 -1에도 오류가 날 수 있는데 빈 리스트 '[]' 를 선언했을 때로 알고있으면 된다.

 

728x90
반응형

'Python > 나의 첫 파이썬' 카테고리의 다른 글

5부 딕셔너리(dict)  (0) 2021.09.21
4부 if문  (0) 2021.09.15
3부 리스트 다루기 & 튜플(tuple)  (0) 2021.09.15
1부 기초  (2) 2021.09.09
Comments