[Week 1]Day 3 Python基礎文法II
50013 ワード
📒 Python Data Structure
Pythonでの資料構造の使い方についての講座です.
学校で1年間資料構造の授業を受けているので、自信のある分野です.
Python Collections内部には初めて見た名前もあり、不思議でした.
今日の授業が終わったら、Collectionsファイルを開きたいです.
📝 Stack
>>> a = [1, 2, 3, 4, 5]
>>> a.append(6) # Push
>>> a.pop() # Pop
6
>>> a.pop() # pop을 return 값도 가지며, 자료도 변화시킨다.
5
📝 Queue
>>> a = [1, 2, 3, 4, 5]
>>> a.append(6) # enqueue
>>> a.pop(0) # dequeue
1
>>> a.pop(0)
2
>>> print(a)
[3, 4, 5, 6]
📝 Tuple
>>> t = (1, 2, 3)
>>> type(t)
tuple
>>> t + t
(1, 2, 3, 1, 2, 3)
>>> len(t)
3
>>> t[0] = 5 # 값을 변경할 수 없다.
TypeError: 'tuple' object does not support item assignment
>>> t2 = (2)
>>> type(t2)
int # 값이 하나인 tuple이여도, ','를 반드시 사용하자!
✏️ Why use?
主にプログラムの実行中に変更されないデータを格納するために使用されます.
関数の戻り値など、ユーザによるエラーを予め防止することができる.
📝 Set
▼▼▼基本文法
>>> s = set([1, 2, 3, 1, 2, 3]) # s = {1, 2, 3} 도 가능하다.
>>> type(s)
set
>>> print(s)
{1, 2, 3} # 중복 자료는 제거한다.
>>> s.add(4) # 원소 추가
>>> s.remove(2) # 원소 제거. s.discard(2) 와 같은 문법
>>> print(s)
{1, 3, 4}
>>> s.update([1, 2, 5, 6]) # 한 번에 여러개 추가
>>> print(s)
{1, 2, 3, 4, 5, 6}
>>> s.clear() # 모든 원소를 삭제
remove()는 존재하지 않는 원소를 지우려고 하면 Error가 난다.
discard()는 원소가 존재하지 않는 경우도 보장시켜준다.
▼▼▼集合の演算
>>> s1 = {1, 2, 3, 4}
>>> s2 = {3, 4, 5, 6}
>>> s1.union(s2) # 합집합. s1 | s2 와 같은 문법이다.
{1, 2, 3, 4, 5, 6}
>>> s1.intersection(s2) # 교집합. s1 & s2 와 같은 문법이다.
{3, 4}
>>> s1.difference(s2) # 차집합. s1 - s2 와 같은 문법이다.
{1, 2}
📝 Dictionary
👉 キーとvalueを一致させることで、keyを使用してvalueを検索します.
>>> country_code = { "America":1, "Korea":82, "China":86 } # 선언. dict()로 생성 가능
>>> country_code.items() # 보통 for 문을 돌릴 떄 사용한다.
dict_items([('America', 1), ('Korea', 82), ('China', 86)]) # 각 tuple 형태이다.
>>> country_code.keys() # key 값들만 반환한다.
dict_keys(['America', 'Korea', 'China')]
>>> country_code['Japan'] = 81 # Dict 추가. 기존 Key에 value를 바꿀 수도 있다.
>>> country_code.values() # value 값들만 반환한다.
dict_values([1, 82, 86, 81])
>>> "Korea" in country_code.keys() # Key 값에 특정 값이 있는지 확인. value도 가능
📝 Deque
>>> from collections import deque
>>> deque_list = deque() # 생성자
>>> for i in range(5):
... deque_list.append(i) # 뒤에 추가
>>> deque_list.appendleft(5) # 앞에 추가
>>> deque_list # extend([]), extendleft([]) 문법도 사용 가능하다.
deque([5, 0, 1, 2, 3, 4])
>>> deque_list.rotate(1)
>>> deque_list
deque([4, 5, 0, 1, 2, 3])
>>> deque_list.pop() # 뒤에서 제거
3
>>> deque_list.popleft() # 앞에서 제거
4
# insert, remove 등으로 인덱스에도 접근 가능하다.
📝 OredredDict
Dictタイプの値をkeyまたはvalueにソートするために使用できます.
📝 defaultdict
>>> from collections import defaultdict
>>> d = defaultdict(labda : 0) # 초기값은 함수 형태로 넣어야된다.
>>> d["first"]
0
d = dict()
d["Key"]=d.get("Key",0) + 1 # get을 사용해서도 가능하다.
📝 Counter
シーケンスタイプのデータ要素の数をdict形式で返します.
>>> from collections import Counter
>>> bat_count = ["B", "S", "B", "B", "S"]
>>> Counter(bat_count)
Counter({ 'B':3, 'S':2 })
📒 Pythonic code
彼はPythonスタイルの符号化方法とPython特有の文法を用いて、コードを効率的に書く方法を教えてくれた.
高度なコードを書くためには、これらの問題も必要だと思います.
これはC++スタイルに詳しい私にとって本当に役に立つ講座です.
📝 split & join
text dataの基礎構文を処理します.
>>> items = 'zero one two three'.split() # 빈칸을 기준으로 문자열 나누기
>>> print(items)
['zero', 'one', 'two', 'three']
>>> example = 'python,java,javascript'
>>> examples = example.split(',') # ','를 기준으로 문자열 나누기
>>> print(examples)
['python', 'java', 'javascript']
>>> p, j, js = example.split(',') # 패킹, 언패킹도 가능
>>> '-'.join(examples) # join 문법. 사이에 '-'를 추가해서 문자열로 반환
'python-java-javascript'
📝 list comprehension
速度は一般的なOrfor+appendより
>>> result = [i for i in range(5)] # 기본 문법(for range)
>>> result
[0, 1, 2, 3, 4]
>>> result = [i for i in range(10) if i % 2 == 0] # if문으로 filter 추가 가능
>>> result
[0, 2, 4, 6, 8]
>>> word1 = 'ab'
>>> word2 = 'cd'
>>> result = [i + j for i in word1 for j in word2] # 2중 for문도 가능
>>> result
['ac', 'ad', 'bc', 'bd']
>>> result = [ [i + j for i in word1] for j in word2] # 뒤의 for문이 먼저 동작
>>> result
[['ac, bc'], ['ad, 'bd']]
📝 enumerate & zip
✏️ enumerate
リストの要素を抽出する場合は、番号を付けて抽出します.
>>> for i, v in enumerate('ABC'): # 기본 문법(list도 가능!)
... print(i, v)
0 A
1 B
2 C
>>> {v : i for i, v in enumerate('ABCD')} # dictionary로 만들기
{'A' : 0, 'B' : 1, 'C' : 2, 'D' : 3}
✏️ zip
2つのlistの値を並列に抽出します.
>>> alist = ['a1', 'a2', 'a3']
>>> blist = ['b1', 'b2', 'b3']
>>> for a, b in zip(alist, blist): # 병렬적으로 값을 추출
... print(a, b)
a1 b1
a2 b2
a3 c3
📝 lambda & map & reduce
✏️ lambda
関数名がなく、関数のように使用できる匿名関数.
数学に由来するランダ代数.
"""
def f(x, y):
return x + y
"""
>>> f = lambda x, y : x + y # 기몬 문법. 상단 함수와 동일 로직
>>> f(10, 20)
30
✏️ map
シーケンス型データがある場合、各データをマッピングする関数.
>>> ex = [1, 2, 3, 4, 5]
>>> list(map(lambda x : x ** 2, ex)) # list화 해주어야 됨!
[1, 4, 9, 16, 25]
list理解、lambdaなどで代用できます.✏️ reduce
map関数とは異なりlistに同じ関数を適用してマージします.
>>> from functools import reduce
>>> print(reduce(lambda x, y : x + y, [1, 2, 3, 4, 5])) # 하단 사진 참고
15
👉 Map-Reduceは主にビッグデータ量のLegacyライブラリまたは複数のMLコードを処理するために使用されます.
📝 generator
✏️ iterable objects
シーケンス・データ型からデータを順番に抽出するオブジェクト
>>> cities = ['Seoul', 'Busan', 'Suwon']
>>> memory_address = iter(cities) # iterable objects 선언
>>> next(memory_address)
'Seoul'
>>> next(memory_address)
'Busan'
>>> next(memory_address)
'Suwon'
>>> next(memory_address)
StopIteration
✏️ generator
👉yieldを使用して一度に1つの要素だけを返します.
>>> gen_ex = (n * n for n in range(100))
>>> print(type(gen_ex)) # 호출 단계에서 하나씩 반환된다.
<class 'generator'>
メモリを節約するためには、大容量データ処理に使用することが望ましい.📝 asterisk
✏️ passing arguments
関数に入力したパラメータの様々な形式.
関数に入力したパラメータの変数名を使用して、パラメータを渡します.
def print_person(name, age):
print(name, age)
print_person("Gyuho", 26)
print_person(name="Gyuho", age="26") # <<<
パラメータのデフォルト値を使用し、入力しない場合はデフォルト値を出力します.
def print_person(name, age=20):
print(name, age)
print_person("Gyuho") # age는 자동으로 20이 들어간다.
print_person("Gyuho", 26) # 물론, 값을 넣을수도 있다.
関数のパラメータが不確定な場合に使用します.
アスタリスクを使用します.
✏️ Variable-length asterisk
これは,
def asterisk_test(*args):
return sum(args)
print(asterisk_test(1, 2, 3, 4, 5))
# 15가 출력된다.
▼▼キーワード可変パラメータ(Keyword variable-length)
def kwargs_test(**kwargs):
print(kwargs)
kwargs_test(first = 1, second = 2, third = 3)
# {'first':1, 'second:'2, 'third':3} 가 출력된다.
また、アスタリスクはtuple、dicなどの資料型の値を開くためにも使用されます.Reference
この問題について([Week 1]Day 3 Python基礎文法II), 我々は、より多くの情報をここで見つけました https://velog.io/@gyuho/Week1-Day3-파이썬-기초-문법IIテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol