Pythonic Code

문주은·2021년 1월 12일
0

1. Split & Join

- join
여러 단어들을 하나로 붙일 때 사용

  • 연결 시 빈칸 1칸으로 연결
alphabet = ['a','b','c','d']
result = ''.join(alphabet)
print(result)	
# >> a b c d 
  • 연결 시 ", "으로 연결
result = ', '.join(alphabet)
# >> a, b, c, d

- split
String Type 값을 나눠서 List 형태로 변환

  • 빈칸을 기준으로 문자열 나누기
items = 'zero one two three'.split()
print(items)
# >> ['zero', 'one', 'two', 'three'] 
  • "," 기준으로 문자열 나누기
example = "python,jquery,javascript"
print(example.split(","))
# >> ['python', 'jquery', 'javascript'] 
  • 리스트에 있는 각 값을 a,b,c 변수로 unpacking
example = "python,jquery,javascript"
a,b,c = example.split(",")
# >> a=python, b=jquery, c=javascript 

2. List comprehensions

(필터라는 기법을 활용해서)기존의 List를 사용하여 새로운 List를 만드는 기법
일반적으로 for+append 보다 속도가 빠르다.

result = [i for i in range(10)]
print(result)
# >> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
result = [i for i in range(10) if i%2==0]
print(result)
# >> [0, 2, 4, 6, 8] 
case_1 = ['A','B','C']
case_2 = ['D','E','A']
result = [i+j for i in case_1 for j in case_2]
print(result)
# >> ['AD', 'AE', 'AA', 'BD', 'BE', 'BA', 'CD', 'CE', 'CA'] 

#필터 i와 j가 같다면 List에 추가하지 않음.
result = [i+j for i in case_1 for j in case_2 if not(i==j)]
print(result)
# >> ['AD', 'AE', 'BD', 'BE', 'BA', 'CD', 'CE', 'CA'] 

#차례대로 배열
result.sort()
print(result)
# >> ['AD', 'AE', 'BA', 'BD', 'BE', 'CA', 'CD', 'CE'] 
#문장을 빈칸 기준으로 나눠 list로 변환
words = "The quick brown fox jumps over the lazy dog".split()
stuff = [[w.upper(), w.lower(), len(w)] for w in words]
for i in stuff:
    print(i)
''' >>
['THE', 'the', 3]
['QUICK', 'quick', 5]
['BROWN', 'brown', 5]
['FOX', 'fox', 3]
['JUMPS', 'jumps', 5]
['OVER', 'over', 4]
['THE', 'the', 3]
'''
  • Two dimensional VS One dimensional
case_1 = ["A","B","C"]
case_2 = ["D","E","F"]
result = [i+j for i in case_1 for j in case_2]
print(result)
# >> ['AD', 'AE', 'AF', 'BD', 'BE', 'BF', 'CD', 'CE', 'CF']
result = [[i+j for i in case_1] for j in case_2]
# >>[['AD', 'BD', 'CD'], ['AE', 'BE', 'CE'], ['AF', 'BF', 'CF']]
print(result)

👉 two dimensional일 때 바깥에 있는 list(여기선case_2)가 고정이 된다

3. Enumerate & Zip

- Enumerate
List의 element(List 값)를 추출할 때 인덱스 번호를 붙여서 추출

  • list에 있는 인덱스와 값을 unpacking
for i,v in enumerate(['tic','tac','toe']):
    print(i,v)
''' >> 
0 tic
1 tac
2 toe
'''
  • index와 값을 unpacking하여 list로 저장
mylist = ['a','b','c','d']
print(list(enumerate(mylist)))
# >> [(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')] 
  • 문장을 list로 만들고 index와 값을 unpacking하여 dict로 저장
print({i:j for i,j in enumerate('The fox jumps over the lazy dog'.split())})
# >>{0: 'The', 1: 'fox', 2: 'jumps', 3: 'over', 4: 'the', 5: 'lazy', 6: 'dog'}

- Zip
두 개의 list에서 같은 인덱스의 위치에 있는 값을 추출

  • 병렬적으로 값을 추출
alist = ['a1','a2','a3']
blist = ['b1','b2','b3']
for a,b in zip(alist, blist):
    print(a,b)
'''>>
a1 b1
a2 b2
a3 b3
'''
  • #각 tuple의 같은 index 끼리 묶음
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)
  • 각 Tuple 같은 index를 묶어 합을 list로 변환
sum = [sum(x) for x in  zip((1,2,3),(10,20,30),(100,200,300))]
print(sum)
# >> [111, 222, 333]

4. MapReduce

sequence형 자료형 (list, tuple) 안에 있는 element값 하나하나에 동일한 function을 적용
lambda x,y 인자값 : x+y return 값
print(list(map(f,ex,ex))) : [2, 4, 6, 8, 10]

  lambda x:x**2 
  print(list(map(f,ex)))
  [value **2 for value in ex]

👉 lambda를 사용하지 않아도 결과값은 같다.

#if filter도 사용 가능
ex = [1,2,3,4,5]
f = lambda x,y : x+y
filter = list(
    map(
        lambda x:x**2 if x%2==0
        else x,ex
    )
)
print(filter)
#>> [1, 4, 3, 16, 5]

5. Asterisk

곱하기, 제곱을 의미한다.
unpacking을 하기 위한 방법으로 사용한다.
여러개의 값들을 한번에 받을 때 사용한다 = 가변인자
ex) 1부터 몇 개의 값을 sum할지 모를 때 사용
둘다 같은 값이 나온다.
👉 즉 *하나는 unpacking 실행을 한다는 뜻이다.

def asterisk_test(a,b,c,d):
    print(a,b,c,d)
dict = {"b":1, "c":2, "d":3}
asterisk_test(10,**dict)
#>> 10 1 2 3

딕트 타입의 값을 풀어줘서 넣어준다.
✔ dict : 딕셔너리로 key:value와 같은 구조

++ degue
appendleft(10) ⇒ 10,0,1,2,3 형태로 바뀐다.
++ defaultDict
초기값 없이 뭔가를 사용하게 될 때 사용
ex) 글자 카운트

profile
Data Engineer

0개의 댓글

관련 채용 정보