본문 바로가기
코딩/파이썬

컬렉션과 반복문

by Song1234 2024. 3. 15.

**1. 리스트와 for문

li1 = ['apple', 'banana', 'orange', 'melon']

for i in li1: # list안 요소의 갯수 만큼 반복
    print(i, end=' ')

결과:
apple banana orange melon

for 문을 이용해서 list의 요소를 하나씩 가져올수있다.


문제1

score 리스트에 저장된 점수가 60점 이상인 학생이 몇명인지 확인하는 프로그램을 작성해보자

  • score = [90, 30, 50, 60, 80, 70, 100, 40, 20, 10]
score = [90, 30, 50, 60, 80, 70, 100, 40, 20, 10]
cnt = 0
for i in score:
    if i >= 60: 
        cnt += 1 # i 가 60보다 크다면 cnt +1
print(f'60점 이상인 학생의 수: {cnt}')

결과:
60점 이상인 학생의 수: 5


2. 딕셔너리와 for문

dic1 = {'no1':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}

for i in dic1: # 딕셔너리의 키값 만큼 반복
    print(i, end=' ')

결과:
no1 userid name hp

for 문을 이용하여 딕셔너리에서 요소를 출력하면 키값이 나온다.


dic1 = {'no1':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}

for i in dic1.keys():
    print(i, end=' ')

결과:
no1 userid name hp


dic1 = {'no1':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}

for i in dic1.values():
    print(i, end=' ')

결과:
1 apple 김사과 010-1111-1111

이런 방식으로도 값을 가져올수있다.


dic1 = {'no1':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}

for i in dic1:
    print(dic1.get(i), end=' ') #dic1.get('no')

결과:
1 apple 김사과 010-1111-1111

get메서드도 사용가능


dic1 = {'no1':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}

# for key,value in dic1: # 키값만 가져오기 때문에 키와 벨류를 같이 가져오려고 하면ValueError: too many values to unpack (expected 2) 에러가 난다
#     print(key,value)
for i in dic1.items():
    print(i)
for key,value in dic1.items():
    print(key,value)

결과:
('no1', 1)
('userid', 'apple')
('name', '김사과')
('hp', '010-1111-1111')
no1 1
userid apple
name 김사과
hp 010-1111-1111

items 함수를 이용하면 키값을 튜플로 반환할수 있고 변수를 두개 사용하면 키와 값을 따로 가져올수있다.


3. 컴프리헨션

컴프리헨션(Comprehension)은 파이썬에서 리스트, 세트, 딕셔너리 등의 컬렉션을 간단하게 생성하거나 변형하는 방법 중 하나입니다. 컴프리헨션은 반복문과 조건문을 사용하여 간결하게 컬렉션을 생성하는 기법으로, 코드를 더 간단하고 가독성 좋게 작성할 수 있도록 도와줍니다.

3-1. 리스트 컴프리헨션

n = 10
result = [0 for i in range(n)] # 리스트를 만들고 반복을 10번하면서 그 값을 0 으로 채워준다.
print(result)

결과:
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

값을 감싸는 괄호에 따라 타입이 지정된다.


n = 10
result = [i for i in range(n)]
print(result)

결과:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


arr = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
result = [n for n in arr]
print(result)

결과:
[10, 20, 30, 40, 50, 60, 70, 80, 90, 100]


arr = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
result = [n*2 for n in arr]
print(result)

결과:
[20, 40, 60, 80, 100, 120, 140, 160, 180, 200]


arr = ['apple', 'banana', 'orange', 'melon']
result = [len(str1) for str1 in arr]
print(result)

결과:
[5, 6, 6, 5]


result = [n for n in range(10) if n % 2 == 0]
print(result)

결과:
[0, 2, 4, 6, 8]


arr = [-1, 0, -4, 24, 5, -10, 2, 20]
# 양수는 리스트에 그대로 저장하고, 음수는 0으로 변환해서 저장
result = [n if n>0 else 0 for n in arr]
print(result)

결과:
[0, 0, 0, 24, 5, 0, 2, 20]

컴프리헨션에 조건식을 추가 할 수 있다.


arr = []

for i in range(1, 4):
    for j in range(1, 3):
        arr.append(i * j)

print(arr)

결과:
[1, 2, 2, 4, 3, 6]


arr = [i*j for i in range(1, 4) for j in range(1, 3)]
print(arr)

결과:
[1, 2, 2, 4, 3, 6]

for 문을 연속해서 쓰면 중첩이되어 이중for문을 사용할수있다.


3-2. 세트 컴프리헨션

numbers = [1, 2, 3, 4, 5,  2, 3, 4]
unique_numbers = set(numbers)
print(unique_numbers)

결과:
{1, 2, 3, 4, 5}


numbers = [1, 2, 3, 4, 5,  2, 3, 4]
unique_numbers = {x for x in numbers}
print(unique_numbers)

결과:
중괄호로 감싸면 세트도 컴프리헨션이 가능하다.


3-3. 딕셔너리 컴프리헨션

names = ['apple', 'banana', 'orange']
name_lengths = {name:len(name) for name in names}
print(name_lengths)

결과:
{'apple': 5, 'banana': 6, 'orange': 6}

'코딩 > 파이썬' 카테고리의 다른 글

파이썬 - 변수의 범위  (0) 2024.03.18
파이썬 - 사용자 정의 함수  (0) 2024.03.15
파이썬 제어문 - 반복문  (2) 2024.03.15
파이썬 제어문 - 조건문  (0) 2024.03.14
파이썬 - 연산자  (2) 2024.03.14