파이썬/기본

[파이썬] 컬렉션과 반복

caramel-bottle 2023. 9. 11.

2023.09.11 - [분류 전체보기] - 파이썬 12 - 반복문

 

파이썬 12 - 반복문

1. 반복문 같은 코드를 여러번 반복하고 싶을 때가 있다. 반복문이 있기 때문에 하나하나 코드를 적을 필요가 없다. 반복문은 동일한 작업을 여러번 실행하기 위해 사용하는 제어 구조이다. 2. whi

caramelbottle.tistory.com

이전 게시글에서 배운 for는 컬렉션과 함께 쓰이는 경우가 대부분이다.

 

리스트와 for

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

for i in li1:
  print(i, end=' ')


리스트와 for를 사용한 탐색

score = [90, 30, 50, 60, 80, 70, 100, 40, 20, 10]
count = 0

for i in score:
  if i >= 60:
    count += 1

print(f'60점 이상인 학생의 수는 {count}명 입니다.')


딕셔너리와 for

dic1 = {'no1':1, 'userid':'apple', 'name':'김사과', 'hp':'010-1111-1111'}
for i in dic1.values():
  print(i, end=' ')

print()

for i in dic1:
  print(dic1[i], end=' ')

print()

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

print()

for i in dic1:
  print(dic1[i], end=' ')
  
print()

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


items() & 언패킹

person = {'name':'김사과', 'age':20, 'city':'서울'}

for key, value in person.items():
  print(key, ':', value)

 


컴프리헨션(Comprehension)

컴프리헨션은 컬렉션을 간단하게 생성하거나 변형하는 방법중 하나이다.

반복문과 조건문을 사용하여 간결하게 컬렉션을 생성하며, 코드를 더 간단하고 가동성 좋게 작성할 수 있도록 도와준다.

리스트 컴프리헨션

result = [n(실제 리스트에 담기는 값) for n(arr에서 꺼낸 값) in arr]

 

n = 10

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

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

result 는 리스트가 됩니다.


연산

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

result = [n for n in arr]
print(result)

result = [n*n for n in arr]
print(result)

실제 리스트에 담기는 부분에는 어떤 변수든 값이든 리스트든 들어갈 수 있다.

위 처럼 연산식도 가능하다.


문자열

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

result = [len(string) for string in arr]
print(result)

result1 = [string for string in arr[0]]
print(result1)

문자열을 리스트로 변환할 경우 유용하게 사용된다.


조건식이 포함된 컴프리헨션

result = [n for n in range(10) if n%2 == 0]
# 조건식이면 다 가능

# for n in range(10) 먼저 -> 조건 -> n

조건식은 뒤에 붙는다. 반환값이 True 이거나 False이면 다 가능하다.

 

# 양수는 리스트에 그대로 저장하고, 음수는 0으로 변환해서 저장하기
arr = [-1, 0, -4, 24, 5, -10, 2]
# [0, 0, 0, 24, 5, 0, 2]

result = [n if n > 0 else 0 for n in arr]

print(result)


이중 for

# 이중 for 문과 컴프리헨션 비교

arr = []
for i in range(1, 4):
  for j in range(1, 3):
    arr.append(i * j)
print(arr)
#    arr에 넣을값     i는 여기서 꺼내오고      j는 여기서 꺼내오고
arr = [i * j for i in range(1, 4) for j in range(1, 3)]

print(arr)

# 가독성이 좋지 않아서 잘 사용하지 않음.

이중 for로 리스트를 만드는 동작을 컴프리헨션으로 똑같이 구현할 수 있다. 하지만 가독성이 좋지 않기 때문에 잘 사용하지는 않는다.


세트 컴프리헨션

numbers = [1, 2, 3, 4, 5, 2, 3, 4]
unique_numbers = {x for x in numbers}
# 세트 컴프리헨션 -> {}

print(unique_numbers) # 세트라서 중복 x

리스트에 있는 값들을 세트로 변환하는 단순한 동작이지만 이러한 것도 가능하다.


딕셔너리 컴프리헨션

names = ['apple', 'banana', 'orange']
name_lengths = {name: len(name) for name in names}
#                딕셔너리 형태
print(name_lengths)

key : value 형태와 {}(중괄호)로 값을 넣는다면 딕셔너리를 만들 수 있다. 

댓글