파이썬에서 리스트(List)는 여러 개의 값을 순서대로 저장할 수 있는 자료형으로 자바의 ArrayList, C++의 vector와 비슷하며, 다양한 타입의 데이터를 한 리스트에 넣을 수 있는 자료형이다.
리스트의 문법
리스트를 생성할때는 다른 언어들보다 간단하다
numbers = [1, 2, 3, 4]
fruits = ["apple", "banana", "cherry"]
mixed = [1, "apple", 3.14, True]
empty = []
타입을 따로 지정해주지 않아도 되기에 그냥 있는대로 중괄호 내부에 넣어주면 된다.
리스트의 인덱스는 0부터 시작하며 음수 인덱스도 지원 한다 .
print(numbers[0]) # 1
print(fruits[-1]) # "cherry"
음수 인덱스의 경우는 뒤에서 부터 순서대로 값을 가져온다.
값을 수정할때는 수정하고자 하는 값의 인덱스에 다른 값을 넣어주면 된다.
numbers[1] = 100
# numbers: [1, 100, 3, 4]
리스트의 경우도 문자열과 동일하게 슬라이싱이 존재한다.
원하는 범위를 아래와 같이 슬라이싱 해서 사용하면 된다.
print(numbers[1:3]) # [100, 3]
리스트의 주요 메서드
1. append(value) : 리스트의 맨 끝에 요소를 추가
numbers.append(5) # [1, 100, 3, 4, 5]
2. insert(index, value) : 리스트의 특정 인덱스에 요소를 추가
numbers.insert(1, 99) # [1, 99, 100, 3, 4, 5]
3. remove(value): 리스트에서 특정 값을 찾아 제거
numbers.remove(3) # [1, 99, 100, 4, 5]
4. pop([index]): 리스트에서 값을 제거하고 해당 값을 반환
전달인자로 인덱스를 전달하고 전달하지 않을 경우 가장 마지막 요소 가 제거된다.
name.pop(name.index("lee")) #lee 제거 - ['park', 'kang', 'kong', 'choi']
name.pop() #choi 제거 - ['park', 'kang', 'kong']
5. len(List) : 리스트를 전달해서 해당 리스트의 길이를 반환한다
print(len(numbers)) # 4
6. sort() / reverse() : 정렬 / 역 정렬
cnt = [4,5,2,6,4,1]
cnt.sort() # 오름차순 정렬
print(cnt) # [1, 2, 4, 4, 5, 6]
cnt.reverse() # 역순 정렬
print(cnt) # [6, 5, 4, 4, 2, 1]
리스트 컴프리헨션(List Comprehension)
리스트 컴프리헨션(list comprehension)은 리스트 및 반복 가능한 객체를 한줄로 가공해서 새 리스트로 만드는 문법이다.
문법의 원형은
[표현식 for 변수 in 반복가능한객체 [if 조건식]]
와 같은 방식으로 구성되며 각각 아래의 의미를 가진다.
- 표현식 : 새로 생성될 리스트의 각 요소를 만드는 방식
- for 변수 in 반복가능한객체 : 반복문
- if 조건식 : (선택적) 조건이 맞을 때만 값 추가
예시를 보자면
even_nums = [x for x in nums if x % 2 == 0]
print(even_nums) # [2, 4]
nums라는 배열의 요소를 돌면서 요소가 짝수일경우 x를 even_nums에 넣어 배열을 생성해준다
추가로 하나를 더 보자면
nums = [1, 2, 3, 4, 5]
squares = [x * x for x in nums]
print(squares) # [1, 4, 9, 16, 25]
nums라는 배열을 돌면서 요소 * 요소로 각각의 제곱에 해당하는 값을 요소로 squares에 배열을 생성해준다