파이썬 추가로 알게 된 것

LeeKyoungChang·2022년 5월 8일
0
post-thumbnail

📚 Dictionary

✔️ 딕셔너리 value를 배열로 받기

id_list = [1,2,3,4]
dicReports = {id: [] for id in id_list}

# 실행 결과 : [1:[], 2:[], 3:[], 4:[]]

 

📚 BackTracking

✔️ BackTracking 구현하기

import copy

arr = ['A', 'B', 'C', 'D', 'E']

result = []
total_result = []


def strcombination(idx):
    for idx in range(idx, len(arr)):
        result.append(arr[idx])
        total_result.append(copy.deepcopy(result))  # 깊은 복사
        strcombination(idx + 1)
        result.remove(arr[idx])


strcombination(0)

print('\n'.join(list(map(str, total_result))))
  • 매 순간 결과를 list에 저장하기

 

결과

['A']
['A', 'B']
['A', 'B', 'C']
['A', 'B', 'C', 'D']
['A', 'B', 'C', 'D', 'E']
['A', 'B', 'C', 'E']
['A', 'B', 'D']
['A', 'B', 'D', 'E']
['A', 'B', 'E']
['A', 'C']
['A', 'C', 'D']
['A', 'C', 'D', 'E']
['A', 'C', 'E']
['A', 'D']
['A', 'D', 'E']
['A', 'E']
['B']
['B', 'C']
['B', 'C', 'D']
['B', 'C', 'D', 'E']
['B', 'C', 'E']
['B', 'D']
['B', 'D', 'E']
['B', 'E']
['C']
['C', 'D']
['C', 'D', 'E']
['C', 'E']
['D']
['D', 'E']
['E']

 

📚 순열과 조합

✔️ 순열 vs 조합

  • 순열은 순서가 없다.
  • 조합은 순서가 있다.

 

✔️ 조합과 Counter라이브러리를 같이 사용하다.

from itertools import combinations
from collections import Counter

course = [2, 3, 4]
orders = ["ABCFG", "AC", "CDE", "ACDE", "BCFG", "ACDEH"]

for c in course:
    temp = []
    for order in orders:
        combi = combinations(sorted(order), c)
        temp += combi
    counter = Counter(temp)
    print(counter)
  • 먼저, 문자열을 기반으로 조합(combinations) 구한다.
  • temp += combi 를 통해 추가
  • 이제 temp에 저장되어 있는 문자열을 기반으로 횟수를 구한다.

 

Counter({('A', 'C'): 4, ('C', 'D'): 3, ('C', 'E'): 3, ('D', 'E'): 3, ('B', 'C'): 2, ('B', 'F'): 2, ('B', 'G'): 2, ('C', 'F'): 2, ('C', 'G'): 2, ('F', 'G'): 2, ('A', 'D'): 2, ('A', 'E'): 2, ('A', 'B'): 1, ('A', 'F'): 1, ('A', 'G'): 1, ('A', 'H'): 1, ('C', 'H'): 1, ('D', 'H'): 1, ('E', 'H'): 1})
Counter({('C', 'D', 'E'): 3, ('B', 'C', 'F'): 2, ('B', 'C', 'G'): 2, ('B', 'F', 'G'): 2, ('C', 'F', 'G'): 2, ('A', 'C', 'D'): 2, ('A', 'C', 'E'): 2, ('A', 'D', 'E'): 2, ('A', 'B', 'C'): 1, ('A', 'B', 'F'): 1, ('A', 'B', 'G'): 1, ('A', 'C', 'F'): 1, ('A', 'C', 'G'): 1, ('A', 'F', 'G'): 1, ('A', 'C', 'H'): 1, ('A', 'D', 'H'): 1, ('A', 'E', 'H'): 1, ('C', 'D', 'H'): 1, ('C', 'E', 'H'): 1, ('D', 'E', 'H'): 1})
Counter({('B', 'C', 'F', 'G'): 2, ('A', 'C', 'D', 'E'): 2, ('A', 'B', 'C', 'F'): 1, ('A', 'B', 'C', 'G'): 1, ('A', 'B', 'F', 'G'): 1, ('A', 'C', 'F', 'G'): 1, ('A', 'C', 'D', 'H'): 1, ('A', 'C', 'E', 'H'): 1, ('A', 'D', 'E', 'H'): 1, ('C', 'D', 'E', 'H'): 1})

 

📚 문자열에서 숫자들 계산하고 싶을 때

eval 함수를 사용하면, 문자열안에서 계산을 할 수 있다.

a = '1+2+3'
print(eval(a)) # 6

 

📚 문자열 lstrip, rstrip 그리고 sort(key)

lstrip : 문자열에서 왼쪽 끝에 있는 지정한 알파벳을 제거하고 싶을 때
rstrip : 문자열에서 오른쪽 끝에 있는 지정한 알파벳을 제거하고 싶을 때

s = '{{,{,},}}'
print(s.lstrip('{')) # ,{,},}}
print(s.rstrip('}')) # {{,{,},

 

문자열 길이에 따라 정렬하고 싶을 때

arr = ['123', 'absss', '12', 'sssssssss', 't', '2']
arr.sort(key=len)
print(arr) # ['t', '2', '12', '123', 'absss', 'sssssssss']

 

📚 zip함수 사용하기

zip list 배열에서 유용하게 사용할 수 있다.

ii+1 인덱스 값 비교할 때

arr = ["12","123","1235","567","88"]  
  
for p1, p2 in zip(arr, arr[1:]):  
    print(p1, p2)
12 123
123 1235
1235 567
567 88

 

📚 이외

✔️ startswith
a.startswith(b) : a 문자열 앞에 b문자열이 있는지 확인할 때 사용한다.

a = '123'
b = '1'
print(a.startswith(b))
True

 

✔️ enumerate

  • 인덱스 번호와 컬렉션의 원소를 tuple형태로 반환
t = [1, 5, 7, 33, 39, 52]
for p in enumerate(t):
	print(p)
(0, 1) 
(1, 5) 
(2, 7) 
(3, 33) 
(4, 39) 
(5, 52)

 

✔️ 딕셔너리를 리스트로 변경한 후, 정렬 하기

dic = {'Abcdde': [401,1], 'Brds':[200,1],'brds':[200,1], 'efg': [700,4], 'Efg':[103, 4]}  

# dictionary를 list으로 변경하기  
listarr = list(dic.items())  
  
# 리스트 lambda 식으로 정렬하기  
listarr.sort(key=lambda x: (x[1][1], x[1][0], x[0]))  
print(listarr)

 

결과

[('Brds', [200, 1]), ('brds', [200, 1]), ('Abcdde', [401, 1]), ('Efg', [103, 4]), ('efg', [700, 4])]

 

 

key와 value로 저장되어 있는 딕셔너리가 있다.
삭제하고자 하는 데이터가 list에 저장되어 있을 때, 이를 이용해 딕셔너리 key 값을 삭제한다.

ex) key가 2의 배수를 삭제하고 싶다.

listarr = {2:1,3:2,4:3,5:4,6:4,10:3,13:2, 17:1, 18:2, 19:5}  
  
delete = []  
  
# key가 2의 배수인 것들을 제거하고 싶다.  
  
for data in range(1, 20):  
    if not data % 2:  
        delete.append(data)  
  
for in_delete in delete:  
    if in_delete in listarr:  
        listarr.pop(in_delete)  
  
print(listarr)

 

결과

{3: 2, 5: 4, 13: 2, 17: 1, 19: 5}
profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"

0개의 댓글

관련 채용 정보