1. 자료구조

  • 컨테이너 자료형: 여러 데이터가 묶여있는 자료형 ex) ['홍길동','임꺽정','이순신']
  • 자료구조: 컨테이너 자료형의 데이터 구조
    - 리스트(List): ['Alice', 'Bob']
    - 튜플(Tuple): ('Alice', 38)
    - 딕셔너리(Dictionary): {'name': 'Alice', 'age':38}
    - 집합(Set): {100, 200, 300}
students = ['Alice', 'Bob', 'Cindy']
print(type(students)) # <class 'list'>

scores = {'Alice': 80, 'Bob': 30, 'Cindy': 60}
print(type(scores)) # <class 'dict'>

2. 리스트(List)란?

  • 배열과 같이 여러 개의 데이터를 나열한 자료구조
  • 대괄호([ ])를 이용하여 선언하고, 데이터 구분은 콤마(,)로 함
  • 숫자, 문자(열), 논리형 등 모든 유형의 데이터를 함께 저장할 수 있음
  • 리스트 내에 리스트를 담을 수 있음
list_none = list() # 또는, list_none = [] 사용 가능
list_a = ['Alice', True, 10, 3.141592]
list_b = [[1, 2, 3], [4, 5, 6]]

print(list_none) # []
print(list_a[0]) # Alice
print(list_b[0]) # [1, 2, 3]

3. 리스트 아이템 조회

  • 인덱스: 각 아이템의 번호표로, 가장 첫 아이템에 0이 할당됨
  • 리스트의 아이템은 인덱스를 이용하여 조회할 수 있음 (단, 범위 밖의 인덱스는 사용할수 없음)
  • 반면, index() 함수를 이용하여 역으로 아이템의 인덱스를 확인할 수 있음
list_num = [1, 2, 3, 4, 5]

print(list_num[0]) # 1
print(list_num[4]) # 5
print(list_num[5]) # IndexError: list index out of range
print(list_num.index(3)) # 2

4. 리스트 길이

  • 리스트에 저장된 아이템 개수(길이)는 문자열의 길이 확인에 사용했던 len()함수를 이용하여 동일하게 확인할 수 있음
list_num = [1, 2, 3, 4, 5]

print(len(list_num)) # 5

5. 리스트와 for문

  • for문을 활용하여 리스트의 아이템을 보다 효율적으로 참조할 수 있음
list_num = [1, 2, 3, 4, 5]

for item in list_num:
	print(item, end="")
    
# 출력결과
# 12345

list_in_list_num = [[1,2], [3,4], [5,6]]

for a, b in list_in_list_num:
	print(f"{a} & {b}")

# 출력결과
# 1 & 2
# 3 & 4
# 5 & 6

6. 리스트와 if문

  • if문을 이용하여 조건에 해당하는 아이템을 참조할 수 있음
scores = [['철수',60], ['영희',50], ['민수',70]]

for name, score in scores:
	if score >= 60:
    	print(name)

# 출력결과
# 철수
# 민수

7. 리스트와 while문

  • for문과 마찬가지로 while문을 이용하여 다양한 조회방식의 설계가 가능함
cars = ["아반떼", "그랜져", "소나타", "K5"]

idx = 0
while idx < len(cars):
    print(cars[idx])
    idx += 1
    
# 출력결과
# 아반떼
# 그랜져
# 소나타
# K5

scores = [['철수',60], ['영희',50], ['민수',70]]

idx = 0
while idx < len(scores):
    
    name = scores[idx][0]
    score = scores[idx][1]
    
    if score >= 60
        print(name)
        
    idx += 1
    
# 출력결과
# 철수
# 민수

8. enumerate() 함수

  • enumerate() 함수를 이용하면 아이템의 인덱스와 내용을 한꺼번에 활용할 수 있음
foods = ["pizza", "burger", "burrito", "quesadilla", "salad"]

for idx, food in enumerate(foods):
    print(f"{idx}번 인덱스의 아이템: {food}")

# 출력결과
# 0번 인덱스의 아이템: pizza
# 1번 인덱스의 아이템: burger
# 2번 인덱스의 아이템: burrito
# 3번 인덱스의 아이템: quesadilla
# 4번 인덱스의 아이템: salad
  • 문자열에도 enumerate() 사용이 가능하며, 이 경우 글자 하나 하나가 아이템으로 취급됨
my_string = "나는 공백이 몇개 있을까요?"
cnt = 0

for idx, letter in enumerate(my_string):
	if letter == " ":
    	cnt += 1

print(f"{cnt}개의 공백이 있습니다.") # 3개의 공백이 있습니다.

9. 리스트 아이템 추가

  • append() 함수: 마지막 인덱스에 아이템 추가
numbers = [1, 3, 6, 11, 45, 54, 62, 74, 85]
numbers.append(90)

print(numbers) # [1, 3, 6, 11, 45, 54, 62, 74, 85, 90]
  • insert() 함수: 특정 인덱스에 아이템 추가
# 숫자를 입력받아 오름차순 상 정렬된된 위치에 insert()하는 프로그램 
numbers = [1, 3, 6, 11, 45, 54, 62, 74, 85]
input_number = int(input("숫자를 입력하세요: "))
insert_idx = 0

for idx, number in enumerate(numbers):
    if input_number < number:
        insert_idx = idx
        break
    
    else:
        insert_idx = len(numbers)
        
numbers.insert(insert_idx, input_number)
print(numbers)

# 숫자를 입력하세요: 86
# [1, 3, 6, 11, 45, 54, 62, 74, 85, 86]
# 숫자를 입력하세요: 0
# [0, 1, 3, 6, 11, 45, 54, 62, 74, 85]
# 숫자를 입력하세요: 30
# [1, 3, 6, 11, 30, 45, 54, 62, 74, 85]

10. 리스트 아이템 삭제

  • pop() 함수: 마지막 인덱스의 아이템 삭제 (단, 별도 인덱스를 지정하면 해당 인덱스의 아이템 삭제)
numbers = [1, 3, 6, 11]
popped_num = numbers.pop()

print(numbers) # [1, 3, 6]
print(popped_num) # 11

numbers = [1, 2, 3, 4, 5]
popped_num = numbers.pop(3)

print(numbers) # [1, 2, 3, 5]
print(popped_num) # 4
  • remove() 함수: 아이템을 명시함으로써 특정 아이템 삭제 가능
names = ["Alice", "Bob", "Cindy", "David"]
names.remove("David")

print(names) # ['Alice', 'Bob', 'Cindy']
  • del 명령어: 변수를 삭제할 때 사용하는 del 명령어를 이용하여, 인덱스 기반 특정 아이템 삭제 가능
names = ["Alice", "Bob", "Cindy", "David"]
del names[3]

print(names) # ['Alice', 'Bob', 'Cindy']

foods = ["burger", "salad", "waffle", "pizza", "pasta"]
del foods[0:3]

print(foods) # ["pizza", "pasta"]

11. 리스트 연결 및 확장

  • extend() 함수: 기존 리스트에 다른 리스트를 연결하여 확장 가능
  • 덧셈연산자(+)를 활용하여도 리스트를 연결할 수 있음
# append(): 마지막 인덱스에 그대로 추가
names_old = ["Alice", "Bob", "Cindy", "David"]
names_new = ["Eesther", "Fanning", "George"]
names_old.append(names_new)

print(names_old) # ['Alice', 'Bob', 'Cindy', 'David', ['Eesther', 'Fanning', 'George']]

# extend(): 연결하여 추가
names_old = ["Alice", "Bob", "Cindy", "David"]
names_new = ["Eesther", "Fanning", "George"]
names_old.extend(names_new)

print(names_old) # ['Alice', 'Bob', 'Cindy', 'David', 'Eesther', 'Fanning', 'George']

# 덧셈연산자
names_old = ["Alice", "Bob", "Cindy", "David"]
names_new = ["Eesther", "Fanning", "George"]

print(names_old + names_new) # ['Alice', 'Bob', 'Cindy', 'David', 'Eesther', 'Fanning', 'George']

12. 리스트 아이템 정렬

  • sort() 함수: 리스트 원본값을 직접 정렬하고, '리스트명.sort()' 형식으로 사용
  • sorted() 함수: 리스트를 정렬한 결과값을 리턴하고, 'sorted(리스트명)' 형식으로 사용
  • 역순으로 정렬을 희망하는 경우, 양 함수 모두 별도의 인자값(reverse=True)을 함수 내 포함시켜야 함
# sort()
my_list = [1, 20, 3, 72, 45, 16, 99]
my_list.sort()

print(my_list) # [1, 3, 16, 20, 45, 72, 99]

# sorted()
my_list = [1, 20, 3, 72, 45, 16, 99]
my_sorted_list = sorted(my_list)

print(my_list) # [1, 20, 3, 72, 45, 16, 99]
print(my_sorted_list) # [1, 3, 16, 20, 45, 72, 99]

13. 리스트 아이템 순서 뒤집기

  • reverse() 함수: 리스트 원본값의 순서를 단순히 뒤집어주고, '리스트명.reverse()' 형식으로 사용
  • reversed() 함수: 리스트를 정렬한 결과값을 리턴하고, 'reversed(리스트명)' 형식으로 사용
# reverse()
my_list = [1, 20, 3, 72, 45, 16, 99]
my_list.reverse()

print(my_list) # [99, 16, 45, 72, 3, 20, 1]

# reversed()
my_list = [1, 20, 3, 72, 45, 16, 99]
my_reversed_list = list(reversed(my_list)) # sorted와 달리 다시 한번 list() 함수로 감싸줘야 함 

print(my_list) # [1, 20, 3, 72, 45, 16, 99]
print(my_reversed_list) # [99, 16, 45, 72, 3, 20, 1]

14. 리스트 슬라이싱

  • [nn:mm] 혹은 [nn:mm:ss] 의 형식으로 리스트에서 원하는 아이템만 추출할 수 있음
  • 리스트의 인덱스가 nn 이상이면서 mm 미만인 아이템을 추출하며, 추가로 ss 지정 시 슬라이싱을 건너 수행할 단계를 지정할 수 있음 (리스트 뿐만 아니라 문자열도 동일하게 슬라이싱 가능)
my_list = [0, 1, 2, 3, 4, 5]
print(my_list[0:3]) # [0, 1, 2]
print(my_list[slice(0, 3)]) # [0, 1, 2] 동일 기능

my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(my_list[0:9:3]) # [0, 3, 6]
print(my_list[slice(0, 9, 3)])  # [0, 3, 6] 동일 기능

my_list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
my_list[0:3] = [9, 9, 9]
print(my_list) # [9, 9, 9, 3, 4, 5, 6, 7, 8, 9]

15. 리스트 곱셈

  • 리스트에 대한 곱셈 연산으로 중복 데이터를 여러번 입력할 수 있음
my_list = [0, 1, 2]

print(my_list * 0) # []
print(my_list * 3) # [0, 1, 2, 0, 1, 2, 0, 1, 2]

16. 리스트 아이템 갯수 확인

  • count() 함수: 입력한 아이템의 갯수를 반환함
data = [1, 1, 0, 1, 1, 0, 1, 0, 1]
print(data.count(1)) # 6

*이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.

profile
데이터 분석, 데이터 사이언스 학습 저장소

0개의 댓글