앞서 포스트한 자료형 외에 파이썬에는 리스트 List 자료형이 있다. 변수 하나에 여러개의 값을 저장할 수 있고, For 반복문 등에서 다양하게 활용할 수 있다.
파이썬 데이터 리스트 자료형 개념과 활용
1. 리스트 LIST
변수 하나에 여러가지 값을 저장하기 위해 사용된다. 말 그대로 리스트를 변수에 저장한다고 생각하면 된다.
리스트를 선언할 때는 대괄호를 사용하고 콤마로 각 값을 구분한다. 리스트 내 각각의 값은 요소라고 부른다.
numbers = [1, 3, 5, 7, 9]
print(numbers)
cities = ["서울", "대전", "대구", "부산"]
print(cities)
위 코드에서 numbers라는 변수에 1, 3, 5, 7, 9 라는 5개의 값을 리스트로 저장했고, 출력하면 리스트가 출력되는 것을 알 수 있다. 숫자와 문자 모두 저장이 가능하다.
2. 인덱스 Index
리스트 내에서 요소의 위치를 인덱스라고 하고, 인덱스를 통해 요소를 가져오는 것을 인덱싱 Indexing 이라고 한다. 이 때 인덱스는 1이 아닌 0부터 시작한다.
numbers에는 1, 3, 5, 7, 9 라는 요소가 있는데 1번 인덱스가 1이 아니라 0번 인덱스가 1이다.
numbers = [1, 3, 5, 7, 9]
print(numbers)
cities = ["서울", "대전", "대구", "부산"]
print(cities)
i = 0
while i <= 4:
print("{}의 인덱스는 {}".format(numbers[i],i))
i += 1
i = 0
while i <= 3:
print("{}의 인덱스는 {}".format(cities[i],i))
i += 1
인덱스로 수식을 활용할 수도 있다. 아래의 코드에서 print(numbers[0] + numbers[3]) 은 1 + 7이고 결과값으로 8이 나온 것을 확인할 수 있다.
numbers = [1, 3, 5, 7, 9]
print(numbers)
print(numbers[0] + numbers[3])
리스트의 인덱스를 별개의 변수에 저장해서 쓸 수도 있다.
numbers = [1, 3, 5, 7, 9]
print(numbers)
num_1 = numbers[1]
num_2 = numbers[4]
print(num_1 + num_2)
numbers에 인덱스 5까지 있는데 6번을 받아오려고 하면 오류가 발생한다.#IndexError: list index out of range
인덱스 범위에 주의 해야 한다.
인덱스는 0부터 시작하고, 5개의 요소가 있다면 마지막 인덱스 번호는 4이다.
numbers = [1, 3, 5, 7, 9]
print(numbers)
print(numbers[5])
파이썬에는 마이너스 인덱스가 있다.
아래의 코드에서 numbers[-1] 은 뒤에서 첫번째 값, numbers[-2] 는 뒤에서 두번째 값, numbers[-5] 은 numbers[0]과 같다
numbers[-6]을 하면 리스트에서 벗어난 값으로 오류가 발생한다.
numbers = [1, 3, 5, 7, 9]
print(numbers)
cities = ["서울", "대전", "대구", "부산"]
print(cities)
i = -1
while i >= -5:
print("{}의 마이너스 인덱스는 {}".format(numbers[i],i))
i -= 1
i = -1
while i >= -4:
print("{}의 마이너스 인덱스는 {}".format(cities[i],i))
i -= 1
3. 리스트 활용
3.1 리스트 슬라이싱
리스트의 일부를 사용하는 방법으로 리스트 슬라이싱 List Slicing이 있다.
List명[x:y]로 사용하며 x가 시작 인덱스, y-1이 마지막 인덱스이다.
List[0:4]를 명령하면 List[4]까지 슬라이싱하는게 아니라 List[3]까지 슬라이싱 한다.
인덱스 번호를 붙이는 것과 마찬가지로 우리가 생각하는 숫자보다 하나 적게 적용되니까 헷갈리지 않게 주의해야한다.
리스트의 개별 요소를 변수에 저장할 수 있는 것과 마찬가지로 슬라이싱한 리스트도 다른 리스트 변수에 저장할 수 있다.
numbers = [1, 3, 5, 7, 9]
print(numbers)
print(numbers[1:3])
print(numbers[:3])
print(numbers[3:])
new_numbers = numbers[1:4]
print(new_numbers)
3.2 리스트 값 교체
리스트를 선언했다고 그 리스트를 계속 사용해야 하는것은 아니다. 개별 인덱스를 통해서 요소의 값을 바꿀 수 있다.
아래의 코드에서 numbers[0] = 11 을 선언하면 0번 인덱스의 값이 1에서 11로 바뀌는 것을 알 수 있다.
numbers = [1, 3, 5, 7, 9]
print(numbers)
numbers[0] = 11
numbers[1] = numbers[3] + numbers [4]
print(numbers)
3.3 리스트 함수로 활용하기
- 리스트의 요소가 몇개 인지 알고 싶을때는 len(LIst) 함수를 활용한다.
numbers = [1, 3, 5, 7, 9]
print(numbers)
print(len(numbers))
cities = ['서울', '대전', '대구', '부산']
print(cities)
print(len(cities))
- 리스트에 값을 추가 하고 싶을때는 List.append(추가 하고 싶은 값) 을 활용한다.
append를 활용하면 리스트의 젤 뒤에 값이 추가된다.
numbers = [1, 3, 5, 7, 9]
print(numbers)
print(len(numbers))
numbers.append(11)
numbers.append(13)
print(numbers)
print(len(numbers))
- 리스트의 값을 지우고 싶을 때는 del list[삭제할 요소의 인덱스]를 활용한다.
이때 3번 인덱스의 요소를 지우고나면 그 뒤에 있던 인덱스가 자동으로 당겨진다.
numbers = [1, 3, 5, 7, 9, 11, 13]
print(numbers)
print(len(numbers))
del numbers[5]
del numbers[0]
print(numbers)
print(len(numbers))
- 리스트의 가장 뒤가 아닌 중간에 값을 추가하고 싶을때는 List.insert(추가하고 싶은 인덱스 번호, 추가하고 싶은 값)을 활용한다. 원하는 위치에 값을 끼워넣을 수 있다.
numbers = [1, 3, 5, 7, 9, 11, 13]
print(numbers)
print(len(numbers))
numbers.insert(1,15)
numbers.insert(4,17)
print(numbers)
print(len(numbers))
4. 리스트 정렬
리스트를 정렬하기 위한 방법은 2가지가 있다.
4.1 sorted를 활용한 리스트 정렬
아래 코드와 같이 아무렇게나 입력된 리스트가 있을 때 sorted를 활용하면 내림차순으로 정렬한다. 내림차순이 정렬의 기본형이며 오름차순으로 정렬하고 싶을 때는 reverse = True를 뒤에 붙여줘야한다.
numbers = [1, 9, 4, 5, 14, 8, 2]
print(numbers)
new_list_1 = sorted(numbers)
new_list_2 = sorted(numbers, reverse=True)
print(new_list_1)
print(new_list_2)
코드를 보면 알겠지만 sorted는 다른 리스트 변수에 저장하지 않으면 의미가 없이 사라진다.
4.2 sort를 활용한 리스트 정렬
sorted와 다르게 sort는 리스트의 순서를 아예 바꿔버리기 때문에 다른 곳에 저장할 필요가 없다. 하지만 원본의 값이 바뀐다는 단점이 있다.
numbers = [1, 9, 4, 5, 14, 8, 2]
print(numbers)
numbers.sort()
print(numbers)
numbers.sort(reverse=True)
print(numbers)
마찬가지로 내림차순이 기본이며 오름차순을 위해서는 괄호안에 reverse = True 를 입력해줘야한다.
5. List 활용 팁
5.1 값이 리스트에 있는지 확인하기
for문을 활용하면 리스트에 특정 값이 있는지 확인하는 수식을 만들 수도 있지만, 편의성의 파이썬답게 별도 함수를 만들지 않아도 특정 값이 리스트에 있는지 확인할 수 있습니다.
numbers = [1, 9, 4, 5, 14, 8, 2]
print(numbers)
print(9 in numbers)
print(19 in numbers)
'in'을 활용해서 값이 리스트에 있는지 확인하고 불린 값을 반환합니다.
마찬가지로 'not in'으로 활용도 가능합니다.
numbers = [1, 9, 4, 5, 14, 8, 2]
print(numbers)
print(9 not in numbers)
print(19 not in numbers)
5.2 리스트 안의 리스트 활용하기 Nested List
리스트 안에 요소를 또 하나의 리스트로 활용할 수 있습니다.
행렬 같은 형태가 되는데 아직은 활용할 곳을 찾기가 어렵지만 아마 앞으로 다양한 부분에서 활용할 곳이 많지 않을까 생각됩니다.
각 리스트를 요소로 활용하면서, 세부 인덱스까지 지정해서 활용할 수 있습니다.
list_in_list = [[11, 22, 33], [44, 55, 66], [77, 88,99]]
print(list_in_list[0])
print(list_in_list[1])
print(list_in_list[2])
print(list_in_list[0][1])
print(list_in_list[1][2])
print(list_in_list[2][0])
5.3 Index 메소드
앞에는 계속 인덱스를 활용해서 요소를 찾았는데, 이번에는 요소를 활용해서 인덱스를 찾아보겠습니다.
numbers = [1, 9, 4, 5, 14, 8, 9]
print(numbers.index(9))
찾고자 하는 요소가 첫번째로 나오는 인덱스를 반환합니다. 다른 인덱스도 찾을 수 있는지는 조금 더 공부해봐야겠습니다. 반복문으로 가능할 것 같습니다.
5.4 Remove 메소드
리스트 내에서 첫번째로 찾아지는 제거하고자 하는 값을 삭제합니다.
numbers = [1, 9, 4, 5, 14, 8, 9]
numbers.remove(9)
print(numbers)
리스트는 앞으로 많이 활용하게 될 거라서 인덱스 번호 등 햇갈리기 쉬운 부분을 잘 기억하고 넘어가는게 좋을 것 같습니다.
파이썬 데이터 리스트 자료형 개념과 활용
《이 포스트는 코드잇 강의 내용을 기반으로 작성되었으며, 개발과 프로그래밍에 대해서 거의 알지 못하는 제가 거의 알지 못하는 초보자를 위해 쓴 글임을 밝힙니다.》