Blair  - Soul Eater 3. 데이터 분석을 위한 핵심 Tool Python(김상모 강사님)_09

• 패스트캠퍼스 데이터분석 부트캠프 12기

3. 데이터 분석을 위한 핵심 Tool Python(김상모 강사님)_09

oujin 2024. 1. 14. 22:31
728x90

▶ 리스트에 값 추가하기

append(), extend(), insert()

1. append()는 단일 항목을 추가

2. extend()는 다른 리스트의 모든 항목( 다른 리스트나 반복 가능한(iterable) 객체의 모든 항목 )을 추가

3. insert()는 특정 위치에 항목을 추가 ( 인덱스 이후의 항목들은 한 칸씩 뒤로 밀리게 됨)

a = [1,2,3]
number = [777]
number.append(a)
print(number)

number = [777]
number.append(5)
print(number)

number = [777]
number.extend(a)
print(number)

import numpy as np
number = [777]
number.append(np.arange(5))
print(number)

number = [777]
number.extend(np.arange(5))
print(number)

list = [1,2,3,4,5]
list.insert(5,6)
print(list)

실행결과 ↓

[777, [1, 2, 3]]
[777, 5]
[777, 1, 2, 3]
[777, array([0, 1, 2, 3, 4])]
[777, 0, 1, 2, 3, 4]
[1, 2, 3, 4, 5, 6]

 

 

▶ 리스트에 값 삭제하기

pop(), remove()

1. pop()은 리스트에서 지정된 인덱스에 있는 항목을 제거하고 남은 리스트를 반환. 인덱스 지정안하면 마지막 항목 제

2. remove()는 리스트에서 특정 값을 찾아 첫번째로 일치하는 항목을 제거합니다.

# 리스트 뒤집기
f = ['a','b','c']
l = []
for i in range(len(f)):
    mf = f.pop()
    l.append(mf)
print(l)

a = [1,2,3,4,5]
a.remove(3)
print(a)

실행결과 ↓

['c', 'b', 'a']
[1, 2, 4, 5]

 

 

▶ 스택과 큐 차이점

# 스택구조: Last In First Out, First In Last Out
# 활용예시 - 웹브라우저 방문기록, 실행 취소
a = []
for i in range(4):
    i += 1
    a.append(i*10)
    print(a)

for i in range(4):
    print(a.pop())

print(a)
print('-'*10)

# 큐구조: First In First Out, Last in Last Out
# 활용예시 - 프린터 인쇄 대기열, 은행/콜센터 업무, 프로세스 관리
for i in range(4):
    i += 1
    a.append(i*10)
    print(a)
for i in range(4):
    print(a.pop(0))

print(a)

실행결과 ↓

[10]
[10, 20]
[10, 20, 30]
[10, 20, 30, 40]
40
30
20
10
[]
----------
[10]
[10, 20]
[10, 20, 30]
[10, 20, 30, 40]
10
20
30
40
[]

 

 

▶ index(), count(), reverse(), sort()

1. index()는 리스트에서 특정 값의 인덱스를 반환. 해당 값이 리스트에 없으면 ValueError 출력.

2. count()는 리스트에서 특정 값의 개수를 반환

3. reverse()는 리스트의 순서를 뒤집는다

4. sort()는 리스트의 항목들을 정렬. 기본적으로는 오름차순(작은 값에서 큰 값 순서)으로 정렬

numList = [3,1,2,2,3,1,1,6,6,4,5,5,5]
fruits = ['apple','banana','melon','suback']

print(fruits.index('suback'))
print(numList.count(3))
fruits.reverse()
print(fruits)
numList.sort()
print(numList)

실행결과 ↓

3
2
['suback', 'melon', 'banana', 'apple']
[1, 1, 1, 2, 2, 3, 3, 4, 5, 5, 5, 6, 6]

 

 

▶ clear()  리스트 모든 요소 삭제하기

numList = [3,1,2,2,3,1,1,6,6,4,5,5,5]
numList.clear()
print(numList)

실행결과 ↓

[]

 

▶ 리스트의 할당: =

a = [0, 0, 0, 0, 0]
b = a #실제로 리스트는 한 개이다. a,b가 같은 리스트를 가짐

print(a is b)
b[2] = 99 #b의 리스트 요소 변경하면
print(a) #a도 동일하게 변경된다.
print(b)

실행결과 ↓

True
[0, 0, 99, 0, 0]
[0, 0, 99, 0, 0]

 

 리스트의 복사: copy()

a = [0, 0, 0, 0, 0]
b = a.copy() #b는 a의 복사본

a is b #False, a,b는 다른 객체
a == b #True, a,b의 요소는 같음

b[2] =99 #a,b는 서로 다른 객체이기 때문에, b의 요소를 변경해도, a의 요소는 변경되지 않음
print(a)
print(b)

실행결과 ↓

[0, 0, 0, 0, 0]
[0, 0, 99, 0, 0]

 

 

▶리스트 요소 출력 : enumerate()

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

for i in a:
    print(i)

#enumerate: 인덱스와 요소를 함께 출력

for index, value in enumerate(a):
    print(index, value)

for index, value in enumerate(a, start=1): #1부터 시작
    print(index, value)

실행결과 ↓

10
20
30
40
50
0 10
1 20
2 30
3 40
4 50
1 10
2 20
3 30
4 40
5 50

 

 

▶ enumerate 사용하여 리스트에서 20을 가지는 모든 index 구하기

a = [10, 20, 3, 40, 20, 50, 20, 30, 60, 70, 20]
result = [] #결과를 저장할 수 있는 리스트 생성

for idx, value in enumerate(a):
    if value == 20: #20을 가지는 모든 요소에서만 동작
        result.append(idx) #20의 인덱스로 리스트 요소 추가

print(result)

실행결과 ↓

[1, 4, 6, 10]

 

 

▶리스트에서 가장 작은 수와 가장 큰 수 출력

1. for문 사용

2. sort() 사용

3. min(), max() 사용

#리스트에서 가장 작은 수와 가장 큰 수 출력

#작은 수 출력
a = [38, 21, 53, 62, 19]
smallest = a[0] #가장 작은 수를 가정

for i in a:
    if i < smallest: #두 수를 비교하여
        smallest = i #smallest(최소값)을 갱신
print(smallest)

#큰 수 출력
a = [38, 21, 53, 62, 19]
biggest = a[0] #가장 큰 수를 가정

for i in a:
    if i > biggest: #두 수를 비교하여
        biggest = i #biggest(최대값)을 갱신
        
print(biggest)
print()

#sort사용하여 최소값 최대값 출력
a.sort() #오름차순 정렬
print(a[0]) #제일 첫번째 (최소값) 출력
print(a[-1]) #제일 마지막 (최대값) 출력
print()

a.sort(reverse=True) #내림차순 정렬
print(a[-1]) #제일 마지막 (최소값) 출력
print(a[0]) ##제일 첫번째 (최대값) 출력
print()

#min, max 사용
print(min(a)) #리스트에서 가장 작은 값을 구함
print(max(a)) #리스트에서 가장 큰 값을 구함

실행결과 ↓

19
62

19
62

19
62

19
62

 

 

▶예제

1~10까지 숫자가 있는 리스트 생성후, 리스트에서 홀수만 출력하는  while문 작성

numbers = [] #빈 리스트

i = 1 #while문 i 초기화

while i <=10: #리스트에 1~10 추가
    numbers.append(i)
    i = i + 1
    
i = len(numbers) - 1 #pop이 뒤에서부터 시작하므로 1을 빼줌(인덱스 오류 방지)

while i >= 0:
    if numbers[i] % 2 == 1: #리스트에서 홀수 고르는 조건문
        numbers.pop(i) #리스트에서 홀수 pop
    i = i - 1

print(numbers)

실행결과 ↓

[2, 4, 6, 8, 10]

 

▶ 리스트 표현식 (List Comprehension)

new_list = [expression for item in iterable if condition]
  • expression: 각 항목에 적용되는 표현식입니다.
  • item: 반복 가능한(iterable) 객체에서 가져온 각 항목을 나타냅니다.
  • iterable: 리스트, 튜플, 문자열 등과 같이 반복 가능한 객체입니다.
  • condition (선택적): 조건문으로, 항목을 포함할지 여부를 결정합니다.
1. 1부터 10까지의 제곱 수 리스트 생성
squares = [x**2 for x in range(1, 11)]
print(squares)
# 출력: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
위의 예제에서는 1부터 10까지의 각 숫자를 제곱한 값을 리스트로 생성

2. 짝수만 포함된 리스트 생성
even_numbers = [x for x in range(1, 11) if x % 2 == 0]
print(even_numbers)
# 출력: [2, 4, 6, 8, 10]
위의 예제에서는 1부터 10까지의 숫자 중 짝수만을 리스트로 생성

3. 문자열의 각 문자를 리스트로 분리
word = "hello"
letters = [char for char in word]
print(letters)
# 출력: ['h', 'e', 'l', 'l', 'o']
위의 예제에서는 문자열 "hello"의 각 문자를 리스트로 분리

 

▶ 리스트에 map사용

a = [1.2, 2.5, 3.7, 4.6]
a = list(map(int, a)) #map을 사용하여 int로 바꾼 요소를 다시 리스트로 생성
print(a)

#range 사용하여 숫자를 만든 뒤 str로 변환

a = list(map(str, range(10)))
print(a) #'모든 요소가 ''

 

 

▶ 언패킹

x = input('숫자 두개 띄어쓰기로 입력').split(' ') #x는 리스트
m = map(int, x) #m은 int로 변환된 map 객체
a, b = m #언패킹
print(a,b)

실행결과 ↓

숫자 두개 띄어쓰기로 입력10 20
10 20

 

 

▶ 30살 이상의 이름과 나이 표시

ai_classes = {
    'class01' : [
               {'name' : '서준', 'age' : 24},
               {'name' : '하준', 'age' : 34},
               {'name' : '도윤', 'age' : 37},
               {'name' : '시윤', 'age' : 19},
               {'name' : '은우', 'age' : 31}
    ],
    'class02' : [
                 {'name' : '지호', 'age' : 34},
                 {'name' : '예준', 'age' : 19},
                 {'name' : '동원', 'age' : 21},
                 {'name' : '민정', 'age' : 22},
                 {'name' : '효주', 'age' : 24}
    ]
}

for i in ai_classes.values(): #딕셔너리 속 value 추출
    for j in i: #value 값을 변수로 설정
        if j['age'] >=30: #30 이상인 조건식
            print(j['name'], ' : ', j['age'], '/', end='')

 

 

▶ 2차원 리스트 언패킹

a = [[10, 20], [30, 40], [50, 60]]

for aa in a: #aa = [10, 20] / [30, 40] / [50, 60] - 2차원 리스트의 요소인 1차원 리스트 추출
    for aaa in aa: #aaa = 10/20/30/40/50/60 - 1차원 리스트의 요소인 값 추출
        print(aaa, end=' ') #개별 요소를 띄어쓰기하여 추출
    print()
    
#추가 코드

for x, y in a: #x, y에 각각 요소를 언패킹
    print(x, y)

실행결과 ↓

10 20 
30 40 
50 60 
10 20
30 40
50 60
728x90