순서가 있는 여러 값을 하나로 나열하여 저장하는 자료형이다.
숫자 1, 2 또는 문자형 "apple", "banana" 값을 저장하려면의 값 1개당 1개의 변수를 계속 만들어줘야 한다.
하지만 때에 따라 1, 2, "apple", "banana"라는 여러 값을 하나로 묶어야 될 때가 있다. 이때 list를 활용하여 값을 하나의 변수로 묶을 수 있다.
list = [1,2,"apple","banana"]
변수 이름 = [요소1,요소2] 방식으로 리스트를 만들 수 있다.
list의 요소는 인덱스를 통해 검색하고 접근할 수 있다.
앞서 리스트는 순서가 있는 여러 값을 하나로 나열하여 저장한다고 했다.
순서가 있으니 인덱스를 활용하여 리스트의 특정 몇 번째 요소를 검색하고 접근할 수 있는 것이다.
fruit = ["apple", "banana", "pear", "grape"]
fruit[1]
# fruit 리스트의 1 위치의 요소를 호출하면 "banana"가 호출된다
# 참고로 파이썬에선 숫자를 카운트할 때 0부터 카운터한다.
인덱스를 활용해 리스트의 특정 위치 값을 수정할 수도 있다.
fruit = ["apple", "banana", "pear", "grape"]
fruit[1] = "strawberry"
print(fruit)
# 출력
["apple", "strawberry", "pear", "grape"]
변수[n] = "수정값"
즉 리스트의 n번째 위치 요소를 "수정값"으로 바꾼다는 뜻이다.
리스트의 값을 슬라이싱 즉 잘라서 원하는 값들만 가져올 수 있다.
fruit = ["apple", "banana", "pear", "grape"]
print(fruit[0:2]) # fruit 리스트의 0번째부터 1번째의 전 값까지 가져온다는 슬라이싱 예이다. 슬라이싱에선 마지막에 입력한 숫자의 전 위치까지 가져온다
#출력
["aplle", "banana"] # 0, 1번째 요소가 출력되어 나오는 걸 알 수 있다.
슬라이싱 예
[ : 5] = 처음부터 4번째 까지 [2 : ] = 2번째부터 끝까지 [2 : 4] = 2번째부터 3번째 까지
🚨 마지막 입력한 숫자 그대로의 위치가 아닌 -1한 위치라는 걸 꼭 기억하자
len(list)을 하면 list의 길이 즉 list에 포함된 값의 개수를 반환해준다.
fruit = ["apple", "banana", "pear", "grape"]
len(fruit)
4 #fruit 리스트는 4개의 값을 가지고 있으니 4를 반환한다.
del(리스트[1])을 하면 해당 리스트의 1번째 위치 값을 삭제한다.
fruit = ["apple", "banana", "pear", "grape"]
del(fruit[3])
print(fruit)
["apple", "banana", "pear"] # fruit 리스트의 3번째 위치 값인 "grape"가 삭제되어 반환된다
list.append(n)을 하면 리스트의 끝에 n에 해당하는 요소를 추가해준다
fruit = ["apple", "banana", "pear", "grape"]
fruit.append("strawberry")
print(fruit)
["apple", "banana", "pear", "grape", "strawberry"]
# 리스트의 맨 끝 위치에 "strawberry" 값이 추가된다.
list.insert(a, b)을 하면 리스트의 a위치에 b의 값을
fruit = ["apple", "banana", "pear", "grape"]
fruit.insert(0,"strawberry")
print(fruit)
["starwberry", "apple", "banana", "pear", "grape"]
# 리스트의 0번째 위치에 "strawberry"가 추가된다.
list.pop(a)을 하면 리스트의 a위치의 값을 반환해 준 후 삭제한다.
fruit = ["apple", "banana", "pear", "grape"]
fruit.pop(1)
"banana" #fruit의 1번째 값인 "banana"를 반환해준다
print(fruit)
["apple", "pear", "grape"]
# 반환된"banana"값이 리스트에서 삭제되어있다.
list.remove(a)을 하면 리스트의 a값이 있을경우 삭제한다
num = [1,2,3,4,5,6]
num.remove(2)
print(num)
[1,3,4,5,6] #2가 삭제된다.
삭제하려는 값이 2개인 경우 : 리스트의 제일 앞에 위치한 값이 먼저 삭제된다. 삭제하려는 값이 애초에 없는 경우 : 오류가 발생된다
list.count(a)을 하면 리스트의 a 요소가 몇개 들어있는지 그 개수를 반환한다.
num = [1,2,3,4,5,6,1,1,1]
num.count(1)
= 5
list1.extend(list2)을 하면 list1에 list2를 더하게 된다.
list1 = [1, 2, 3, 4, 5]
list2 = ["a", "b", "c", "d"]
list1.extend(list2)
print(list1)
[1, 2, 3, 4, 5, "a", "b", "c", "d"] # list1에 list2가 더하진다.
1) sort() : list.sort()로 사용하며, 리스트 내의 요소가 [가나다],[1,2,3],[a,b,c]등 순서대로 정렬된다.
2) reverse() : list.reverse()로 사용하며, 리스트 내의 요소가 역순으로 정렬된다
여러 값을 하나로 저장하는 점에 대해서는 list와 동일하지만 list와는 몇 가지 차이점이 있다.
tuple = (1, 2, 3)
변수 이름 = (요소1, 요소2, 요소3) 방식으로 튜플을 만들 수 있다.
여러 요소를 하나의 변수에 저장할 수 있다. 인덱스를 통해 원하는 요소에 접근할 수 있다 튜플의 요소를 슬라이싱 할 수 있다. 튜플의 길이를 구할 수 있다.
요소의 값을 변경할 수 없는 immutabel이다. 요소의 값을 변경할 수 없기 때문에 insert, append, del 등의 요소를 추가 또는 삭제하는 함수들을 사용할 수 없다. 튜플의 요소를 슬라이싱 할 수 있다. 튜플의 길이를 구할 수 있다.
리스트와 튜플은 순서가 있는 요소를 하나로 관리할 수 있다는 점에서 많은 유사성을 가지고 있다.
거의 유일한 차이점이라고는 안의 요소를 변경할 수 있냐 없냐의 차이라고 할 수 있는데 이 차이로 인해 리스트를 활용해야 할지 튜플을 활용해야할지 완벽하게 갈리게 된다고 생각된다.
간단하게는 특정 데이터를 가져올 때 가져오게 되는 데이터가 몇개인지 알 수 없고 또 변할 수 있는 여지가 있다면 list를 사용하는 것이 좋으며 데이터가 순서, 값 등 절대 변하지 않아야 한다면 tuple을 사용하는 것이 좋을 수 있다 정도로 정리할 수 있을 것 같다.