공부/AI

파이썬 컨테이너 Container 리스트 list

글로벌디노 2024. 11. 24. 20:12

 

리스트 (list)  [ , ]

 

리스트의 다양한 생성 방법 (Create)

 

빈 리스트 생성

empty_list = []
print(empty_list)  # [] 출력

 

요소를 직접 지정하여 리스트 생성

numbers = [1, 2, 3, 4, 5]
fruits = ["apple", "banana", "cherry"]
mixed_list = [1, "hello", True, 3.14]
print(numbers)  # [1, 2, 3, 4, 5] 출력
print(fruits)  # ['apple', 'banana', 'cherry'] 출력
print(mixed_list)  # [1, 'hello', True, 3.14] 출력

 

list() 함수 활용

list() 함수는 다른 시퀀스형 데이터 타입 (문자열, 튜플, range 객체 등)을 리스트로 변환합니다.

# 문자열을 리스트로 변환
string = "hello"
char_list = list(string)
print(char_list)  # ['h', 'e', 'l', 'l', 'o'] 출력

# 튜플을 리스트로 변환
tuple_data = (1, 2, 3)
list_data = list(tuple_data)
print(list_data)  # [1, 2, 3] 출력

# range 객체를 리스트로 변환
numbers = list(range(1, 6))
print(numbers)  # [1, 2, 3, 4, 5] 출력

 

리스트 표현식 (List Comprehension)

[표현식 for 변수 in 반복 가능한 객체 if 조건]

# 1부터 10까지의 숫자를 담은 리스트 생성
numbers = [num for num in range(1, 11)]
print(numbers)  # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 출력

# 1부터 10까지의 짝수만 담은 리스트 생성
even_numbers = [num for num in range(1, 11) if num % 2 == 0]
print(even_numbers)  # [2, 4, 6, 8, 10] 출력

# 문자열 리스트에서 각 문자열의 길이를 담은 리스트 생성
words = ["apple", "banana", "cherry"]
lengths = [len(word) for word in words]
print(lengths)  # [5, 6, 6] 출력

 

반복문과 append() 메서드 활용

# 빈 리스트 생성
numbers = []

# 1부터 5까지의 숫자를 리스트에 추가
for i in range(1, 6):
  numbers.append(i)

print(numbers)  # [1, 2, 3, 4, 5] 출력

 

2차원 리스트 생성

# 3x3 크기의 2차원 리스트 생성 (모든 요소는 0)
matrix = [[0 for _ in range(3)] for _ in range(3)]
print(matrix)  # [[0, 0, 0], [0, 0, 0], [0, 0, 0]] 출력

# 1부터 9까지의 숫자를 담은 3x3 크기의 2차원 리스트 생성
matrix = [[num for num in range(row * 3 + 1, row * 3 + 4)] for row in range(3)]
print(matrix)  # [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 출력

 

리스트 요소 접근, 사용 (Read)

1. 인덱싱 (indexing)

my_list = [10, 20, 30, 40, 50]

# 첫 번째 요소 출력
print(my_list[0])  # 10 출력

# 세 번째 요소 출력
print(my_list[2])  # 30 출력

# 마지막 요소 출력
print(my_list[-1])  # 50 출력

# 마지막에서 두 번째 요소 출력
print(my_list[-2])  # 40 출력

 

2. 슬라이싱 (Slicing)

my_list = [10, 20, 30, 40, 50]

# 두 번째부터 네 번째 요소까지 출력
print(my_list[1:4])  # [20, 30, 40] 출력

# 세 번째 요소부터 끝까지 출력
print(my_list[2:])  # [30, 40, 50] 출력

# 처음부터 세 번째 요소까지 출력
print(my_list[:3])  # [10, 20, 30] 출력

# 처음부터 끝까지 2칸 간격으로 출력
print(my_list[::2])  # [10, 30, 50] 출력

# 끝부터 처음까지 출력 (reverse)
print(my_list[::-1]) # [50, 40, 30, 20, 10] 출력

# 끝에서 2번째 요소부터 첫번째 요소까지 출력
print(my_list[-2::-1]) # [40, 30, 20, 10] 출력

# 끝에서부터 두 번째 요소까지 2칸 간격으로 출력
print(my_list[:-4:-2]) # [50, 30] 출력

 

3. for 루프

my_list = [10, 20, 30, 40, 50]

for element in my_list:
  print(element)  # 각 요소 출력

 

4. enumerate() 함수

my_list = [10, 20, 30, 40, 50]

for index, element in enumerate(my_list):
  print(f"인덱스 {index}: {element}")  # 인덱스와 요소 출력

 

5. 리스트 내포 (List comprehension) 활용

my_list = list(range(1, 11))

# 짝수만 선택하여 새로운 리스트 생성
even_numbers = [num for num in my_list if num % 2 == 0]
print(even_numbers)

 

리스트 요소 수정 (Update)

 

인덱싱을 사용한 수정

my_list = [10, 20, 30, 40, 50]

my_list[2] = 35  # 인덱스 2의 요소 (30) 를 35로 변경
print(my_list)  # [10, 20, 35, 40, 50] 출력

 

슬라이싱을 사용한 수정

my_list = [10, 20, 30, 40, 50]

my_list[1:4] = [25, 35, 45]  # 인덱스 1부터 3까지의 요소를 [25, 35, 45] 로 변경
print(my_list)  # [10, 25, 35, 45, 50] 출력

my_list[2:4] = (60, 70)  # 인덱스 2부터 3까지의 요소를 (30, 40) 으로 변경
print(my_list)  # [10, 25, 60, 70, 50] 출력

 

for 루프와 enumerate() 함수 활용

my_list = [1, 2, 3, 4, 5]

# 짝수는 2배로, 홀수는 3배로 변경
for index, element in enumerate(my_list):
  if element % 2 == 0:
    my_list[index] = element * 2
  else:
    my_list[index] = element * 3

print(my_list)  # [3, 4, 9, 8, 15] 출력

 

리스트 요소 삭제 (Delete)

remove() 메서드

리스트에서 특정 값을 가진 요소를 삭제

만약 리스트에 같은 값을 가진 요소가 여러 개 있다면, 가장 먼저 나타나는 요소 하나만 삭제

리스트에 없는 값을 삭제하려고 하면 ValueError가 발생

 

예시)

 

pop() 메서드

리스트에서 특정 인덱스의 요소를 삭제

pop() 메서드의 인자로 삭제할 요소의 인덱스를 전달합니다. 인덱스를 생략하면 마지막 요소를 삭제

삭제된 요소를 반환

my_list = [10, 20, 30, 40, 50]

popped_element = my_list.pop(2)  # 인덱스 2의 요소 (30) 를 삭제하고 반환
print(popped_element)  # 30 출력
print(my_list)  # [10, 20, 40, 50] 출력

last_element = my_list.pop()  # 마지막 요소 (50) 를 삭제하고 반환
print(last_element)  # 50 출력
print(my_list)  # [10, 20, 40] 출력

 

del 키워드

리스트에서 특정 요소 또는 슬라이스를 삭제

인덱스를 사용하여 삭제할 요소를 지정

my_list = [10, 20, 30, 40, 50]

del my_list[1]  # 인덱스 1의 요소 (20) 삭제
print(my_list)  # [10, 30, 40, 50] 출력

del my_list[2:4]  # 인덱스 2부터 3까지의 요소 (40, 50) 삭제
print(my_list)  # [10, 30] 출력

 

clear() 메서드

리스트의 모든 요소를 삭제

my_list = [10, 20, 30, 40, 50]

my_list.clear()  # 모든 요소 삭제
print(my_list)  # [] 출력

 

 

리스트 함수

.sort()

파이썬 리스트의 sort() 함수는 리스트의 요소를 제자리에서(in-place) 정렬하는 함수입니다. 즉, 새로운 리스트를 생성하지 않고 기존 리스트의 순서를 변경합니다.

my_list.sort()  # 오름차순 정렬
my_list.sort(reverse=True)  # 내림차순 정렬

 

numbers = [3, 1, 4, 1, 5, 9, 2, 6]
numbers.sort()
print(numbers)  # [1, 1, 2, 3, 4, 5, 6, 9] 출력

numbers.sort(reverse=True)
print(numbers)  # [9, 6, 5, 4, 3, 2, 1, 1] 출력

 

key 매개변수:
key 매개변수를 사용하여 정렬 기준을 지정할 수 있습니다. key 매개변수에는 함수를 전달해야 하며, 이 함수는 각 요소에 적용되어 정렬에 사용될 값을 반환합니다.

 

문자열 길이 순으로 정렬:

words = ["apple", "banana", "cherry", "date"]
words.sort(key=len)
print(words)  # ['date', 'apple', 'cherry', 'banana'] 출력

 

절대값 순으로 정렬:

numbers = [3, -1, 4, -1, 5, -9, 2, 6]
numbers.sort(key=abs)
print(numbers)  # [-1, -1, 2, 3, 4, 5, 6, -9] 출력

 

튜플의 두 번째 요소를 기준으로 정렬:

data = [(1, 5), (3, 2), (2, 4), (4, 1)]
data.sort(key=lambda item: item[1])
print(data)  # [(4, 1), (3, 2), (2, 4), (1, 5)] 출력

 

참고:

sort() 함수는 리스트 자체를 변경하고 None을 반환합니다.

정렬된 새로운 리스트를 얻고 싶다면 sorted() 함수를 사용해야 합니다.

sort() 함수는 안정 정렬(stable sort)을 수행합니다. 즉, 같은 값을 가진 요소들의 상대적인 순서는 유지됩니다.

반응형