티스토리 뷰

728x90

Pythonic Code란 무엇을까요?

파이썬 스러운 코드를 말하는데

 

 

문자열의 값을 분리하여 리스트 형태로 변환 해주는 split( )

문자열 값을 분리하여 나중에 크롤링에도 사용한다고 한다. 

>>> items = 'zero one two three'.split()
>>> items
['zero', 'one', 'two', 'three']
>>> example = 'python, java, c'
>>> example.split(",")
['python', ' java', ' c']
>>> a,b,c = example.split(",")
>>> print(a,b,c)
python  java  c
# 빈 칸 기준 문자열 분리
# ,를 기준으로 문자열 분리 # 분리된 각 값을 언패킹

 

리스트를 합쳐 하나의 문자열로 바꿔주는 join( )

>>> colors = ['red', 'blue' ,'green', 'yellow'] >>> result = ''.join(colors)
>>> result
'redbluegreenyellow'
>>> result = ' '.join(colors) >>> result
'red blue green yellow'
>>> result = ', '.join(colors) >>> result
'red, blue, green, yellow'
>>> result = '-'.join(colors)
>>> result
'red-blue-green-yellow'

 

리스트와 for문을 한줄에 사용가능한 리스트 커프리헨션(list comperhenshion)

기존 리스트형을 사용하여 간단하게 새로운 리스트르 만드는 방법이다.

내부적으로 잘 구성된 메모리 사용 방식으로, 기존 for문보다 시간면에서 효울적인 연산을 수행하기도 한다.

배열안에 for문을 써서 배열을 만들어준다.

>>> result = []
>>> for i in range(10):
           result.append(i)
>>> result
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

기존에 이렇게 표현하던 코드를 리스트 커프리헨션으로 표현한다면?

>>> result = [i for i in range(10)] 
>>> result
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

 

조건을 부여하는 필터링

>>> result = []
>>> for i in range(10):
if i % 2 == 0: result.append(i)
>>> result
[0, 2, 4, 6, 8]

기존에 if문을 써서 2의 배수인 값만 넣어줬다면?

>>> result = [i for i in range(10) if i % 2 == 0] 
>>> result
[0, 2, 4, 6, 8]

이렇게 단 2줄로 표현이 가능하다.

여러 조건을 더 간단하게도 표현이 가능한데..

>>> result = [i if i % 2 == 0 else 10 for i in range(10)] >>> result
[0, 10, 2, 10, 4, 10, 6, 10, 8, 10]

if를 for문 앞에다가 사용해서 간단하게 표현이 가능하다.

 

중첩 반복문

for 문을 여러게 사용이 가능하다.

>>> word_1 = "Hello"
>>> word_2 = "World"
>>> result = [i + j for i in word_1 for j in word_2]
>>> result
['HW', 'Ho', 'Hr', 'Hl', 'Hd', 'eW', 'eo', 'er', 'el', 'ed', 'lW', 'lo', 'lr', 'll', 'ld', 'lW', 'lo', 'lr', 'll', 'ld', 'oW', 'oo', 'or', 'ol', 'od']

중첩 반복문에 if를 사용해서 조건을 다는 것 도 가능하다.

>>> result = [i + j for i in word_1 for j in word_2 if not(i==j)] >>> result
['HW', 'Ho', 'Hr', 'Hl', 'Hd', 'eW', 'eo', 'er', 'el', 'ed', 'lW', 'lo', 'lr', 'ld', 'lW', 'lo', 'lr', 'ld', 'oW', 'or', 'ol', 'od']

 

>>> word_1 = "Hello"
>>> word_2 = "World"
>>> result = [i + j for i in word_1 for j in word_2] # 일차원 리스트
>>> result
['HW', 'Ho', 'Hr', 'Hl', 'Hd', 'eW', 'eo', 'er', 'el', 'ed', 'lW', 'lo', 'lr', 'll', 'ld', 'lW', 'lo', 'lr', 'll', 'ld', 'oW', 'oo', 'or', 'ol', 'od']

이차원 리스트를 사용하면 아래와 같이 for문의 순서가 바뀌게 된다 주의하자!

>>> result = [[i + j for i in word_1] for j in word_2] # 이차원 리스트 >>> result
[['HW', 'eW', 'lW', 'lW', 'oW'], ['Ho', 'eo', 'lo', 'lo', 'oo'], ['Hr', 'er', 'lr', 'lr', 'or'], ['Hl', 'el', 'll', 'll', 'ol'], ['Hd', 'ed', 'ld', 'ld', 'od']]

 

리스트의 값과 인덱스를 함께 출력하는 enumarate()

enumarate는 아래와 같이 인덱스를 함께 출력해준다.

>>> for i,v in enumerate(['tic', 'tac', 'toe']):
           print(i,v)
0 tic
1 tac
2 toe

아래와 같이 인덱스를 key로  단어를 value로 하여 묶어 딕셔너리 형태로 만들 수 있다.

>>> words = 'The quick brown fox jumps over the lazy dog'.split()
>>> {i:j for i,j in enumerate(words)}
{0: 'The', 1: 'quick', 2: 'brown', 3: 'fox', 4: 'jumps', 5: 'over', 6: 'the', 7: 'lazy', 8: 'dog'}

 

같은 인덱스 값끼리 묶어주는 zip()

zip은 배열 간의 같은 인덱스끼리 묶어준다. 아래와 같이 같은 위치에 있는 값끼리 계산 해서 보여 줄 수도 있다.

* 그리고 zip은 배열중에 가장 짧은 애 까지만 묶어주고 멈춘다, 나머지는 버린다.

>>> a, b, c = zip((1,2,3),(10,20,30),(100,200,300))
>>> print(a,b,c)
(1, 10, 100) (2, 20, 200) (3, 30, 300)
>>> [sum(x) for x in zip((1,2,3),(10,20,30),(100,200,300))] # 같은 위치 값 더하기 [111, 222, 333]

 

마지막으로 인덱스를 출력하는 enumerate() 와 인덱스 끼리 묶어주는 zip()를 함께 써보자

>>> alist = ['a1', 'a2', 'a3']
>>> blist = ['b1', 'b2', 'b3']
>>> for i,(a, b) in enumerate(zip(alist, blist)):
0 a1 b1
1 a2 b2
2 a3 b3

 

 

쉬운 것 같으면서도 어려운 파이썬! 

다음부터는 객체지향 프로그래밍에(클래스) 대한 내용을 확인해 보겠습니다. 

댓글