리스트는 값의 집합으로, 어떤 자료형이건 상관없이 리스트 안에 들어갈 수 있다. 리스트는 기본적으로 "리스트 이름= [요소1, 요소2, ...]"와 같은 형식으로 선언하고 초기화하며, 만약 비어있는 리스트를 선언하고 싶다면 "리스트 이름 = list()"라고 작성하면 된다.
oddnumber = [1, 3, 5, 7, 9]
cafes = ['star', 'bene', 'yoger', 'friends']
A = [1, 5, 'A', 'CC', 'B']
listInList = [[1, 3, 5, 6, 7], cafes, oddnumber, 1, 3, 'Abc']
oddnumber = [1, 3, 5, 7, 9]
cafes = ['star', 'bene', 'yoger', 'friends']
A = [1, 5, 'A', 'CC', 'B']
listInList = [[1, 3, 5, 6, 7], cafes, oddnumber, 1, 3, 'Abc']
a = oddnumber[3]
b = cafes[1]
c = A[2]
d = listInList[0][1] #리스트 내 리스트 접근
print(a)
print(b)
print(c)
print(d)
print(a + d, oddnumber[4] * listInList[4]) #숫자 + 숫자 연산 가능
print(b + c) #문자열 + 문자열: 문자열 합하기
oddnumber = [1, 3, 5, 7, 9]
cafes = ['star', 'bene', 'yoger', 'friends']
A = [1, 5, 'A', 'CC', 'B']
listInList = [[1, 3, 5, 6, 7], cafes, oddnumber, 1, 3, 'Abc']
a = oddnumber[1:5]
b = cafes[1:]
c = A[:2]
d = listInList[0][1:4] #리스트 내 리스트 접근
print(a)
print(b)
print(c)
print(d)
리스트를 더하고 반복하는 예시
evennumbers = [2, 4, 6, 8, 10]
oddnumbers = [1, 3, 5, 7, 9]
numbers = evennumbers + oddnumbers
print(numbers)
# [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]
print(numbers * 4)
# [2, 4, 6, 8, 10, 1, 3, 5, 7, 9, 2, 4, 6, 8, 10, 1, 3, 5, 7, 9, 2, 4, 6, 8, 10, 1, 3, 5, 7, 9, 2, 4, 6, 8, 10, 1, 3, 5, 7, 9]
문자열은 Immutable 타입이기에 인덱싱으로 값을 수정할 수 없으나, 리스트에서는 얼마든지 가능하다. 먼저 요소를 수정하려면 "리스트 이름[인덱스값] = 수정값" 형식으로 코딩해야 한다.
numbers = [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]
numbers[4] = 100
print(numbers)
numbers[2] = "hello"
print(numbers)
numbers[0] = numbers[9] #인덱스 9를 인덱스 0에 대입
print(numbers)
numbers[8] = ['a', 'b', 'c'] #리스트 전체를 형태 유지하며 대입
print(numbers)
리스트의 요솟값을 인덱싱을 이용해 수정할 때는 1대1 대응이다. 슬라이싱으로 수정할 때는 다르다.
numbers = [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]
numbers[4:5] = [80]
print(numbers)
numbers[2:6] = "hello"
print(numbers)
numbers[2:3] = ['a','b','c']
print(numbers)
numbers[8] = ['a', 'b', 'c'] #리스트 전체를 형태 유지하며 대입
print(numbers)
numbers[:] = [1]
print(numbers)
numbers[4:5]
는 인덱스 4만 가져오지만 리스트로 판단되기 때문에, 슬라이싱으로 값을 수정할 때는 단일 값이 아닌 리스트로 대입해야 한다.numbers[2:6] = "hello"
에서 "hello"는 하나의 문자열이자 문자 집합이다. 따라서 슬라이싱으로 값을 대입할 때 슬라이싱한 범위에 문자열의 문자를 순차적으로 하나씩 대입한다.numbers[2:3] = ['a', 'b', 'c']
와 같이 슬라이싱한 범위에 리스트를 넣으면 대입할 리스트의 구성 요소들이 numbers
에 완전히 포함된다. 그러나, numbers[8] = ['a', 'b', 'c']
는 리스트 내 리스트 형태로 수정되었다. 인덱싱과 슬라이싱의 차이점을 확인하자.리스트에서 요소만 삭제하려면 인덱싱과 슬라이싱으로 기존 요소를 빈칸으로 수정하면 된다. 예를 들어, 인덱싱은 a[4] = ""
, 슬라이싱은 a[1:3] = []
와 같이 입력하면 그 공간은 공백으로 남게 된다.
numbers = [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]
#값만 삭제
numbers[3] = ""
print(numbers)
del
키워드를 통한 삭제도 가능하지만, del
키워드는 객체 자체를 삭제한다는 차이를 가진다.
numbers = [2, 4, 6, 8, 10, 1, 3, 5, 7, 9]
a = "goorm"
#공간까지 삭제
del numbers[4]
print(numbers)
del numbers[:5]
print(numbers)
#객체 자체를 삭제
del a
슬라이싱으로 수정하는 범위가 이해되지 않았는데 해결됐다.
2:6 값을 주면 인덱스 2부터 5까지의 값을 하나씩 수정하는게 아니라, 원래 있던 값의 자리를 비워내고 새로운 값을 채운다고 생각하면 된다. 그래서 본래 변수 개수보다 더 많은 변수를 넣어줘도 문제가 없는 거다. 휴~
이 글은 goorm edu의 한 눈에 끝내는 파이썬3 기초 강좌를 참고하여 작성되었습니다.