마케팅/데이터 분석

[파이썬] 리스트/사전과 for 반복문

퍼포마첼라 2025. 2. 24. 16:19

 

리스트

리스트와 요소, 인덱싱

# 리스트 (list)
numbers = [2, 3, 5, 7, 11, 13]
names = ['윤수',' 혜린', '태호', '영훈']

print(numbers)
print(names)

# [2, 3, 5, 7, 11, 13]
# ['윤수', ' 혜린', '태호', '영훈']
#인덱싱 (indexing)
print(names[1])  #혜린
print(numbers[1] + numbers[3])  #10

num_1 = numbers[1]
num_3 = numbers[3]
print(num_1 + num_3)  #10

#마이너스 인덱싱
print(numbers[-1])  #13
print(numbers[-6])  #2
#리스트 슬라이싱 (list slicing)
print(numbers[0:4])  #[2, 3, 5, 7]
print(numbers[4:])  #[11, 13]
print(numbers[:3])  #[2, 3, 5]

new_list = numbers[:3]  #[2, 3, 5]
print(new_list[2])  #5
numbers[0] = 7  
print(numbers)  #[7, 3, 5, 7, 11, 13]

numbers[0] = numbers[0] + numbers[1] 
print(numbers)  #[10, 3, 5, 7, 11, 13]

 

 

리스트 함수

numbers = []

#len : 리스트 길이
print(len(numbers))  #0
numbers = []

#append : 리스트에 요소 추가
numbers.append(5)
numbers.append(8)

print(numbers)  #[5, 8]
print(len(numbers))  #2
numbers = [2,3,5,7,11,13,17,19]

# del : 리스트 요소 지우기
del numbers[1]
print(numbers)  #[2, 5, 7, 11, 13, 17, 19]
numbers = [2,3,5,7,11,13,17,19]

# insert : 원하는 위치에 요소 삽입
numbers.insert(4, 37)
print(numbers)  #[2, 3, 5, 7, 37, 11, 13, 17, 19]

 

 

리스트 정렬

sorted

기존 리스트는 건드리지 않고, 정렬된 새로운 리스트를 리턴

numbers = [19,13,2,5,3,11,7,17]

new_list = sorted(numbers)
print(numbers)  #[19, 13, 2, 5, 3, 11, 7, 17]

#sorted 함수는 정렬된 리스트를 리턴할 뿐 리스트를 바꾸지 않는다.


#오름차순 정렬
new_list = sorted(numbers)
print(new_list) #[2, 3, 5, 7, 11, 13, 17, 19]


#내림차순 정렬 
new_list = sorted(numbers, reverse = True)
print(new_list) #[19, 17, 13, 11, 7, 5, 3, 2]

 

sort

아무것도 리턴하지 않고, 기존 리스트를 정렬

numbers = [19,13,2,5,3,11,7,17]

print(numbers.sort())  #None
#sort()는 numbers를 정렬할 뿐 리턴값이 없다.

numbers.sort()
print(numbers)  #[2, 3, 5, 7, 11, 13, 17, 19]

numbers.sort(reverse = True)
print(numbers)  #[19, 17, 13, 11, 7, 5, 3, 2]

 

 

리스트 인덱싱 연습

greetings = ["안녕", "니하오", "곤니찌와", "올라", "싸와디캅", "헬로", "봉주르"]

# 여기에 코드를 작성하세요
i = 0
while i < len(greetings) : 
    print(greetings[i])
    i += 1
    
    
    
#안녕
#니하오
#곤니찌와
#올라
#싸와디캅
#헬로
#봉주르

 

 

리스트 함수 활용

# 빈 리스트 만들기
numbers = []
print(numbers) #[]

# numbers에 값들 추가
# 코드를 입력하세요
numbers.append(1)
numbers.append(7)
numbers.append(3)
numbers.append(6)
numbers.append(5)
numbers.append(2)
numbers.append(13)
numbers.append(14)
print(numbers) #[1, 7, 3, 6, 5, 2, 13, 14]

# numbers에서 홀수 제거
# 코드를 입력하세요
del numbers[0]
del numbers[0]
del numbers[0]
del numbers[1]
del numbers[2]
print(numbers) #[6, 2, 14]

# numbers의 인덱스 0 자리에 20이라는 값 삽입
# 코드를 입력하세요
numbers.insert(0, 20)
print(numbers) #[20, 6, 2, 14]

# numbers를 정렬해서 출력
# 코드를 입력하세요
numbers.sort()
print(numbers) #[2, 6, 14, 20]
# numbers에서 홀수 제거
# 코드를 입력하세요

i = 0
while i < len(numbers):
    if numbers[i] % 2 == 1:
        del numbers[i]
    else:
        i += 1
print(numbers)  #[6, 2, 14]

 

 

리스트에서 값의 존재 확인

#리스트에 값이 있는지 확인

primes = [2, 3, 5, 7, 11, 13, 17, 19, 23]
print(7 in primes) 
print(12 in primes)

#True
#False


#리스트에 값이 없는지 확인

primes = [2, 3, 5, 7, 11, 13, 17, 19, 23]
print(7 not in primes)
print(12 not in primes)

#False
#True

 

 

for 반복문

상황에 따라 while보다 코드가 더 깔끔할 수 있다.

for i in [1,2,3,4,5,6] :
    print(i)

 

 

range 함수

장점

간편함, 깔끔함, 메모리 효율성

#파라미터 1개 버전
for i in range(stop):
    print(i)

#0부터 stop-1까지의 범위


#파라미터 2개 버전
for i in range(start, stop):
    print(i)

#start부터 stop-1까지의 범위


#파라미터 3개 버전
for i in range(start, stop, step):
    print(i)

#start부터 stop-1까지의 범위, 간격 step

 

 

range 연습

numbers = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]

# 인덱스와 원소 출력
# 여기에 코드를 작성하세요
for i in range(len(numbers)):
    print(i, numbers[i])
    
# 0 2
# 1 3
# 2 5
# 3 7
# 4 11
# 5 13
# 6 17
# 7 19
# 8 23
# 9 29
# 10 31

 

 

for문 구구단

num1 = 1
num2 = 1
max_num = 9

for i in range(max_num):
    num1 = i + 1
    for j in range(max_num):
        num2 = j + 1
        print(num1,"*",num2,"=",num1 * num2)
# 모범답안
for i in range(1, 10):
    for j in range(1, 10):
        print("{} * {} = {}".format(i, j, i * j))

 

 

사전

#사전 (dictionary)
# key-value pair (키-값)

my_dictionary = {
    5: 25,
    2: 4,
    3: 9
}

#타입 확인하기
print(type(my_dictionary)) #<class 'dict'>

#불러오기
print(my_dictionary[3]) #9

#추가하기
my_dictionary[9] = 81
print(my_dictionary) #{5: 25, 2: 4, 3: 9, 9: 81}

#키가 정수형일 필요는 없다
my_family = {
    '엄마': '김자옥',
    '아빠': '이석진',
    '아들': '이동민',
    '딸': '이지영'
}

print(my_family['딸']) #이지영

 

 

사전 활용법

my_family = {
    '엄마': '김자옥',
    '아빠': '이석진',
    '아들': '이동민',
    '딸': '이지영'
}

#어떤 값이 있는지 확인하기
print(my_family.values()) 
#dict_values(['김자옥', '이석진', '이동민', '이지영'])

#특정 값이 있는지 확인하기
print('이지영' in my_family.values()) #True

#반복문
for value in my_family.values():
    print(value)
    
# 김자옥
# 이석진
# 이동민
# 이지영

#키만 불러오기 
print(my_family.keys()) 
#dict_keys(['엄마', '아빠', '아들', '딸'])

#반복문
for key in my_family.keys():
    print(key)
    
# 엄마
# 아빠
# 아들
# 딸

for key in my_family.keys():
    value = my_family[key]
    print(key, value)
    
# 엄마 김자옥
# 아빠 이석진
# 아들 이동민
# 딸 이지영

for key, value in my_family.items():
    print(key, value)
    
# 엄마 김자옥
# 아빠 이석진
# 아들 이동민
# 딸 이지영

 

 

실습

# 투표 결과 리스트
votes = ['김영자', '강승기', '최만수', '김영자', '강승기', '강승기', '최만수', '김영자', \
'최만수', '김영자', '최만수', '김영자', '김영자', '최만수', '최만수', '최만수', '강승기', \
'강승기', '김영자', '김영자', '최만수', '김영자', '김영자', '강승기', '김영자']

# 후보별 득표수 사전
vote_counter = {}

# 리스트 votes를 이용해서 사전 vote_counter를 정리하기
kim_num = 0
kang_num = 0
choi_num = 0
    
for name in votes:
    # 여기에 코드를 작성하세요
    if name == '김영자':
        kim_num += 1
    elif name == '강승기':
        kang_num += 1
    elif name == '최만수':
        choi_num +=1
    else :
        print('없음')

# print(kim_num, kang_num, choi_num)

vote_counter['김영자'] = kim_num
vote_counter['강승기'] = kang_num
vote_counter['최만수'] = choi_num

# 후보별 득표수 출력
print(vote_counter)

#결과
#{'김영자': 11, '강승기': 6, '최만수': 8}
#모범답안
# 투표 결과 리스트
votes = ['김영자', '강승기', '최만수', '김영자', '강승기', '강승기', '최만수', '김영자', \
'최만수', '김영자', '최만수', '김영자', '김영자', '최만수', '최만수', '최만수', '강승기', \
'강승기', '김영자', '김영자', '최만수', '김영자', '김영자', '강승기', '김영자']

# 후보별 득표수 사전
vote_counter = {}

# 리스트 votes를 이용해서 사전 vote_counter를 정리하기
for name in votes:
    if name not in vote_counter:
        vote_counter[name] = 1
    else:
        vote_counter[name] += 1

# 후보별 득표수 출력
print(vote_counter)

 

 


코드잇 6.리스트/사전과 for 반복문