카테고리 없음

🐨파이썬 리스트 자료형🏃‍♀️

redcubes 2024. 8. 18. 08:38

파이썬의 리스트(List)는 데이터 구조 중 하나로, 여러 개의 값을 순차적으로 저장할 수 있는 mutable(변경 가능)한 자료형.리스트는 다양한 자료형의 데이터를 혼합하여 저장할 수 있고, 리스트 내의 요소에 접근하거나 수정, 삭제가 가능하다.

리스트의 기본 사용법과 자주 사용되는 내부 메서드들에 대해 설명한다.

1. 리스트 생성 및 기본 사용법

리스트는 대괄호 []를 사용하여 생성할 수 있다.
list() 로도 생성 가능하다.
리스트는 다양한 자료형을 포함할 수 있으며, 인덱스를 통해 요소에 접근할 수 있다.

# 리스트 생성
numbers = [1, 2, 3, 4, 5]
mixed = [1, "apple", 3.14, True]
line = input("공백으로 구분하여 숫자 입력").split()
print(line)
array = list(map(int,line))
print(array)

# 리스트 요소 접근
print(numbers[0])  # 출력: 1
print(mixed[1])    # 출력: "apple"

리스트는 0부터 시작하는 인덱스를 가지며, 음수 인덱스를 사용하여 리스트의 뒤에서부터 요소에 접근할 수도 있다.

# 음수 인덱스 사용
print(numbers[-1])  # 출력: 5
print(numbers[-2])  # 출력: 4

2. 리스트의 주요 메서드

append()

리스트의 끝에 새로운 요소를 추가한다.

numbers.append(6)
print(numbers)  # 출력: [1, 2, 3, 4, 5, 6]

insert()

리스트의 특정 위치에 요소를 삽입한다.

numbers.insert(2, 10)
print(numbers)  # 출력: [1, 2, 10, 3, 4, 5, 6]

pop()

리스트의 마지막 요소를 제거하고, 그 값을 반환한다. 인덱스를 지정하면 해당 위치의 요소를 제거한다.

last_element = numbers.pop()
print(last_element)  # 출력: 6
print(numbers)       # 출력: [1, 2, 10, 3, 4, 5]

remove()

리스트에서 첫 번째로 발견되는 특정 값을 제거한다.

numbers.remove(10)
print(numbers)  # 출력: [1, 2, 3, 4, 5]

sort()

리스트의 요소를 오름차순으로 정렬한다. reverse=True를 인자로 전달하면 내림차순으로 정렬할 수 있다.

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

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

len()

리스트의 길이(요소 개수)를 반환한다.

print(len(numbers))  # 출력: 5

sum()

리스트 요소의 합을 계산한다. 단, 리스트가 숫자로만 구성된 경우에만 사용 가능하다.

print(sum(numbers))  # 출력: 15

count()

리스트에서 특정 값이 몇 번 등장하는지 세어준다.

numbers = [1, 2, 3, 4, 2, 2, 5]
count_of_two = numbers.count(2)
print(count_of_two)  # 출력: 3

index()

리스트에서 특정 값이 처음으로 등장하는 위치(인덱스)를 반환한다. 값이 리스트에 없으면 ValueError가 발생한다.

index_of_four = numbers.index(4)
print(index_of_four)  # 출력: 3

🤔연습문제: 백준 10807번 개수 세기

a = 
arr = 
n = 
print()

 

 

3. 리스트 컴프리헨션(List Comprehension)

리스트 컴프리헨션은 리스트를 간결하게 생성할 수 있는 방법으로, 온라인 저지에서 반복적인 작업을 간결하게 처리하는 데 유용하다.

# 1부터 10까지의 제곱수를 가진 리스트 생성
squares = [x**2 for x in range(1, 11)]
print(squares)  # 출력: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

 

4. 슬라이싱(Slicing)

슬라이싱은 list[start:end:step]의 형태로 사용된다. 여기서 start는 슬라이싱을 시작할 인덱스, end는 슬라이싱을 멈출 인덱스(포함되지 않음), step은 요소를 선택할 간격을 의미한다. 기본적으로 step은 1로 설정된다.

기본적인 슬라이싱

슬라이싱은 특정 범위의 요소들을 선택하여 새로운 리스트를 생성한다. end 인덱스는 포함되지 않으므로, 슬라이싱 결과는 start 인덱스부터 end-1 인덱스까지의 요소들로 이루어진다.

numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 인덱스 2부터 5까지 슬라이싱
sublist = numbers[2:6]
print(sublist)  # 출력: [2, 3, 4, 5]

슬라이싱에서 start, end, step 생략하기

슬라이싱에서는 start, end, step 값을 생략할 수 있으며, 이 경우 기본값이 사용된다.

  • start를 생략하면 리스트의 처음부터 시작한다.
  • end를 생략하면 리스트의 끝까지 포함한다.
  • step을 생략하면 기본값인 1이 적용된다.
# 리스트의 처음부터 인덱스 4까지 슬라이싱
print(numbers[:5])  # 출력: [0, 1, 2, 3, 4]

# 인덱스 5부터 끝까지 슬라이싱
print(numbers[5:])  # 출력: [5, 6, 7, 8, 9]

# 리스트 전체를 슬라이싱
print(numbers[:])  # 출력: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

step을 사용한 슬라이싱

step을 사용하면 일정 간격으로 요소를 선택할 수 있다. step이 양수이면 앞에서부터, 음수이면 뒤에서부터 요소를 선택한다.

# 1칸씩 건너뛰며 슬라이싱
print(numbers[::2])  # 출력: [0, 2, 4, 6, 8]

# 리스트를 역순으로 슬라이싱
print(numbers[::-1])  # 출력: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

슬라이싱을 사용하여 리스트 수정하기

슬라이싱은 단순히 새로운 리스트를 만드는 데만 사용하는 것이 아니라, 기존 리스트의 일부를 수정하거나 삭제할 때도 사용할 수 있다.

# 슬라이싱을 통한 부분 수정
numbers[2:5] = [20, 30, 40]
print(numbers)  # 출력: [0, 1, 20, 30, 40, 5, 6, 7, 8, 9]

# 슬라이싱을 통한 요소 삭제
numbers[2:5] = []
print(numbers)  # 출력: [0, 1, 5, 6, 7, 8, 9]

5. 기타 자주 사용하는 메서드

reverse()

리스트의 요소 순서를 역순으로 뒤집는다.

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

extend()

다른 리스트의 모든 요소를 기존 리스트에 추가한다. 이 메서드는 두 리스트를 연결할 때 사용된다.

numbers.extend([6, 7, 8])
print(numbers)  # 출력: [1, 2, 3, 4, 2, 2, 5, 6, 7, 8]

copy()

리스트의 얕은 복사본(shallow copy)을 반환한다. 리스트의 요소들이 참조하는 객체들까지 복사하지는 않는다.

numbers_copy = numbers.copy()
print(numbers_copy)  # 출력: [1, 2, 3, 4, 2, 2, 5, 6, 7, 8]

clear()

리스트의 모든 요소를 제거하여 빈 리스트로 만든다.

numbers.clear()
print(numbers)  # 출력: []

7. 추가적으로 알아두면 좋은 사항

리스트와 반복문

리스트는 반복문과 함께 자주 사용된다. for 루프를 사용하여 리스트의 각 요소에 접근할 수 있으며, 이 방법은 특정 작업을 리스트의 모든 요소에 적용할 때 유용하다.

fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

🤔연습문제 BOJ 10871번 X보다 작은 수

더보기
n, x = map(int, input().split())
sequence = input().split()

answer = []
for i in sequence:
    if int(i) < x:
        answer.append(i)
    
print(' '.join(answer))

 

in 연산자

in 연산자를 사용하여 리스트에 특정 값이 포함되어 있는지 확인할 수 있다.

if "banana" in fruits:
    print("Banana is in the list.")

🤔연습문제 BOJ 5597번 과제 안 내신 분..?

#방법 1. 없으면 새 리스트에 추가하는 방법.

#방법 2. 출석번호에서 지우는 방법.

8. 리스트와 함께 자주 쓰이는 함수

파이썬에서 리스트와 관련된 함수는 메서드와는 달리 리스트 객체에 직접 호출되지 않고, 독립적으로 사용되는 함수들이다. 

len()

  • 리스트의 길이(요소의 개수)를 반환한다.
  • 사용법: len(list)
  • 예시:
    my_list = [1, 2, 3, 4]
    length = len(my_list)
    print(length)  # 출력: 4
    

max()

  • 리스트에서 가장 큰 값을 반환한다.
  • 사용법: max(list)
  • 예시:
    my_list = [1, 2, 3, 4]
    maximum = max(my_list)
    print(maximum)  # 출력: 4
    

min()

  • 리스트에서 가장 작은 값을 반환한다.
  • 사용법: min(list)
  • 예시:
    my_list = [1, 2, 3, 4]
    minimum = min(my_list)
    print(minimum)  # 출력: 1
    

sum()

  • 리스트의 모든 요소를 합산하여 반환한다.
  • 사용법: sum(list)
  • 예시:
    my_list = [1, 2, 3, 4]
    total = sum(my_list)
    print(total)  # 출력: 10
    

sorted()

  • 리스트를 정렬하여 새로운 리스트를 반환한다. 원본 리스트는 변경되지 않는다.
  • 사용법: sorted(list, reverse=False)
  • 예시:
    my_list = [3, 1, 4, 2]
    sorted_list = sorted(my_list)
    print(sorted_list)  # 출력: [1, 2, 3, 4]
    

list()

  • 이터러블(iterable)을 리스트로 변환한다.
  • 사용법: list(iterable)
  • 예시:
    tuple_example = (1, 2, 3)
    my_list = list(tuple_example)
    print(my_list)  # 출력: [1, 2, 3]
    

map()

  • 리스트의 각 요소에 함수를 적용한 결과를 반환한다. 반환되는 객체는 이터레이터(iterator)로, 이를 리스트로 변환하기 위해서는 list()와 함께 사용할 수 있다.
  • 사용법: map(function, list)
  • 예시:
    my_list = [1, 2, 3, 4]
    result = list(map(lambda x: x * 2, my_list))
    print(result)  # 출력: [2, 4, 6, 8]
    

filter()

  • 리스트의 각 요소에 함수를 적용하여 조건에 맞는 요소들만 걸러내어 반환한다. 반환되는 객체는 이터레이터(iterator)이다.
  • 사용법: filter(function, list)
  • 예시:
    my_list = [1, 2, 3, 4]
    result = list(filter(lambda x: x % 2 == 0, my_list))
    print(result)  # 출력: [2, 4]
    

zip()

  • 두 개 이상의 리스트의 요소들을 묶어서 튜플의 리스트로 반환한다.
  • 사용법: zip(list1, list2, ...)
  • 예시:
    list1 = [1, 2, 3]
    list2 = ['a', 'b', 'c']
    result = list(zip(list1, list2))
    print(result)  # 출력: [(1, 'a'), (2, 'b'), (3, 'c')]
    

이 함수들은 리스트를 처리하거나 조작할 때 자주 사용되는 함수들이다. 각 함수는 리스트의 특정 작업을 보다 편리하게 수행할 수 있게 도와준다.

9. 추가적으로 알아두면 좋은 사항 2

객체전달, 값 전달. 깊은복사, 얕은복사 문제
- 아래 코드의 결과를 예측해 봅시다.

#목표: [[0], [1], [2], [3], [4], [5], [6]] 만들기!!
a = [0]
b = []
for i in range(7):
	a[0]=i
    b.append(a)
print(b)
더보기
a = [0]
b = []
for i in range(7):
	a[0]=i
	b.append(list(a))
print(b)
a = [0]
b = []
for i in range(7):
	a[0]=i
	b.append(a.copy())
print(b)

https://www.youtube.com/watch?v=LC5gZ9O7-YU&list=PLMsa_0kAjjrcxiSJnHNfzBN71D3zpYtkX&index=11

https://youtu.be/uxf4cTeonY4?list=PLMsa_0kAjjrcxiSJnHNfzBN71D3zpYtkX

https://youtu.be/KEhPKBpPJvI?list=PLMsa_0kAjjrcxiSJnHNfzBN71D3zpYtkX

https://wikidocs.net/14

 

02-3 리스트 자료형

지금까지 우리는 숫자와 문자열에 대해서 알아보았다. 하지만 숫자와 문자열만으로 프로그래밍을 하기에는 부족한 점이 많다. 예를 들어 1부터 10까지의 숫자 중 홀수의 모음인 1, …

wikidocs.net

https://docs.python.org/ko/3/library/stdtypes.html#sequence-types-list-tuple-range

 

Built-in Types

The following sections describe the standard types that are built into the interpreter. The principal built-in types are numerics, sequences, mappings, classes, instances and exceptions. Some colle...

docs.python.org