Lecture 파이썬 자료구조 - 컴프리핸션

Views 419 • Comments 0 • Last Updated at 5 months ago Full screen  
  • 리스트
  • 자료 구조

컴프리헨션

컴프리헨션(Comprehension)은 파이썬에서 리스트를 한 줄로 만드는 간단하고 편리한 방법입니다.

리스트 안에 for문과 if문을 포함하여 리스트를 생성하는 방법입니다.

컴프리헨션은 리스트뿐만 아니라 딕셔너리, 셋 등에서도 사용될 수 있습니다. 예를 들어, 다음과 같은 코드는 1부터 10까지의 수 중에서 홀수만 포함하는 리스트를 생성하는 컴프리헨션입니다.

odd_numbers = [x for x in range(1, 11) if x % 2 == 1]

위 코드에서 for x in range(1, 11)는 1부터 10까지의 수를 변수 x에 대입하며 반복하고, if x % 2 == 1은 x가 홀수인 경우에만 리스트에 포함시킵니다.

리스트 안에서 x는 각각의 수를 의미하며, [x for x in range(1, 11) if x % 2 == 1]는 리스트를 생성하는 식입니다.

이러한 방법으로 컴프리헨션을 이용하면 한 줄의 코드로 간단하게 리스트를 생성할 수 있습니다.

n1 = []
for i in range(1,6):
    n1.append(i)
print(n1)

n2 = [i for i in range(1,6)]

n3 = [n for n in range(1,21) if n % 3 == 0]
vec = [-4, -2, 0, 2, 4]
# create a new list with the values doubled
[x*2 for x in vec]
# filter the list to exclude negative numbers
[x for x in vec if x >= 0]
# apply a function to all the elements
[abs(x) for x in vec]
# call a method on each element
freshfruit = [' banana', ' loganberry ', 'passion fruit ']
[weapon.strip() for weapon in freshfruit]
# create a list of 2-tuples like (number, square)
[(x, x**2) for x in range(6)]
# the tuple must be parenthesized, otherwise an error is raised
[x, x**2 for x in range(6)]
# flatten a list using a listcomp with two 'for'
vec = [[1,2,3], [4,5,6], [7,8,9]]
[num for elem in vec for num in elem]
[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], ]
# 전치를 구하는 방법 1
[[row[i] for row in matrix] for i in range(4)]
# 전치 방법 2
transposed = []
for i in range(4):
   transposed.append([row[i] for row in matrix])
#전치 방법 3   
transposed = []
for i in range(4):
   # the following 3 lines implement the nested listcomp
   transposed_row = []
   for row in matrix:
      transposed_row.append(row[i])
   transposed.append(transposed_row)

zip( )

zip() 함수는 여러 개의 리스트를 받아서 각 리스트의 원소들을 순서대로 묶어서 하나의 튜플로 만들어주는 함수이다.

이렇게 묶인 튜플들은 리스트로 묶여서 반환된다.

예를 들어, zip([1, 2, 3], ['a', 'b', 'c']) 라는 코드를 실행하면 (1, 'a'), (2, 'b'), (3, 'c') 라는 튜플들이 리스트 [ (1, 'a'), (2, 'b'), (3, 'c') ] 로 묶여서 반환된다. 이렇게 반환된 리스트를 이용하면 여러 리스트에 동시에 접근할 수 있다.

예를 들어, 다음과 같은 코드를 실행하면, 두 개의 리스트 numbers와 letters에서 각각의 원소들을 동시에 접근할 수 있다.

numbers = [1, 2, 3]
letters = ['a', 'b', 'c']

for num, let in zip(numbers, letters):
    print(num, let)

위 코드를 실행하면 다음과 같은 결과가 출력된다.

1 a
2 b
3 c
n1 = [1,2,3,4,5,6,7,8]
n2 = ['a', 'b', 'c', 'd']
n3 = ['가', '나', '다']

for f1,f2,f3 in zip(n1,n2,n3):
    print(f1, f2, f3)
previous article
last article
Comments
Feel free to ask a question, answer or comment, etc.