3週目SSAFY復習

10586 ワード

新学を主とする!

データ構造


文字列


x順序の変更があり、巡回可能です.

クエリーの参照


.index(x):xの最初の位置を返します.
a = "apple"
a.index("p")

文字列の変更


.replace(old, new[, count])
# 변수명이 a, b인 문자열을 만들어봅시다.
a = 'yaya!'
b = 'wooooowoo'

# replace 메서드로 변수 a의 글자 y를 h로 변경해봅시다.
a.replace("y","h") 

# replace 메서드로 변수 b의 글자 o 2개를 _로 변경해봅시다.
b.replace("o", "_", 2)
.strip([chars])
文字が指定されている場合は、両側または左側(lstrip)または右側(rstrip)を削除します.指定しない場合は、スペースを削除します.
# 변수명이 a, b인 문자열을 만들어봅시다.
a = '   hello!  \n'
b = 'hihihihahahahihi'

# stript 메서드로 변수 a의 양쪽 공백을 제거해 봅시다.
a.strip(" ")
'hello!'

# lstript 메서드로 변수 a의 왼쪽 공백을 제거해 봅시다.
a.lstrip(" ")
'hello!  \n'
# rstrip 메서드로 변수 b의 오른쪽에서 글자 hi를 제거해 봅시다.
a.rstrip()
'   hello!'
"sparator".join(iteable)
特定の文字列で作成して返します.
反復可能(iterable)コンテナの要素を区切り記号(区切り記号)に結合し、文字列を返します.
# 변수명이 word인 문자열, words인 리스트를 만들어 봅시다.
word = '배고파'
words = ['안녕', 'hello']

# join 메서드로 변수 word의 문자열 사이에 !를 넣은 결과를 반환해봅시다.
"!".join(word)
'배!고!파'

# join 메서드로 변수 words의 문자들을 하나로 합친 결과를 반환해봅시다.
"".join(words)
'안녕hello'

インベントリ


値の追加と削除


.extend(iterable)
リストにiterable(list、range、tuple、string[注意])値を追加できます.

# extend 메서드로 변수 cafe에 ['wcafe', '빽다방']를 추가해봅시다.
cafe.extend(["wcafe"])
print(cafe)

['starbucks', 'tomntoms', 'hollys', 'banapresso', 'banapresso', 'banapresso', 'w', 'c', 'a', 'f', 'e', 'w', 'c', 'a', 'f', 'e', 'wcafe']

# append vs extend

# append 메서드로 변수 cafe에 ['coffeenie']를 추가해봅시다.

cafe.append("coofednie")

print(cafe)

['starbucks', 'tomntoms', 'hollys', 'banapresso', 'banapresso', 'banapresso', 'w', 'c', 'a', 'f', 'e', 'w', 'c', 'a', 'f', 'e', 'wcafe', 'droptop', 'coofednie']

# append vs extend

# extend 메서드로 변수 cafe에 ['twosome_place']를 추가해봅시다.

cafe.extend("twosome_plafe")

print(cafe)

['starbucks', 'tomntoms', 'hollys', 'banapresso', 'banapresso', 'banapresso', 'w', 'c', 'a', 'f', 'e', 'w', 'c', 'a', 'f', 'e', 'wcafe', 'droptop', 'coofednie', 't', 'w', 'o', 's', 'o', 'm', 'e', '_', 'p', 'l', 'a', 'f', 'e']
.insert(i, x)
指定した位置iに値を追加します.

# insert 메서드로 변수 cafe 길이보다 큰 인덱스에 문자열 !를 넣어봅시다.
# 리스트의 길이를 넘어서는 인덱스는 마지막에 아이템이 추가됩니다.
cafe.insert(100000, "wow")
print(cafe)

['start', 'starbucks', 'tomntoms', 'hollys', 'banapresso', 'banapresso', 'banapresso', 'w', 'c', 'a', 'f', 'e', 'w', 'c', 'a', 'f', 'e', 'wcafe', 'droptop', 'coofednie', 't', 'w', 'o', 's', 'o', 'm', 'e', '_', 'p', 'l', 'a', 'f', 'e', 'end', 'end', 'end', 'end', 'wow']

.index(x)
x値が見つかり、インデックス値が返されます.
cf)indexは1つの値しか検索しません!
lis=[1,0,1]
#filter 사용
list(filter(lambda e:lis[e] == 1, range(len(lis))))
[0, 2]

#enumerate 사용
[i for i, ele in enumerate(lis) if ele == 1]
[0, 2]
.count(x)
必要な値の数を返します.

# 원하는 값을 모두 삭제하려면 다음과 같이 할 수 있습니다.
a = [1, 2, 1, 3, 4]
target_value = 1
for i in range(a.count(target_value)):
    a.remove(target_value)
print(a)

[2, 3, 4]
.sort()
を行ないます.
ジェネリックリストを変換し、Noneを返します(ソートされた組み込み関数とは異なります).
# 변수 lotto에 1부터 45 까지의 숫자가 들어있는 리스트를 저장합니다.
# 6개의 숫자를 랜덤으로 저장합니다.
import random
lotto = random.sample(range(1, 46), 6)
print(lotto)

# sort 메서드로 리스트를 정렬합니다.
# sort 메서드를 실행한 결과와 원본을 각각 출력해봅니다.
lotto.sort()

print(lotto)

[15, 21, 22, 32, 35, 45]


# sorted 함수를 사용한 결과와 비교해봅시다.
import random
lotto = random.sample(range(1, 46), 6)
print(lotto, sorted(lotto))

[37, 40, 39, 17, 26, 13] [13, 17, 26, 37, 39, 40]

リストのコピー方法

 slice 연산자 사용 [:]

# 변수명이 a인 리스트를 만들어봅시다.
a = [1, 2, 3]

# slice 연산자로 리스트 a의 모든 요소를 변수 b에 저장합니다.
# 리스트 b의 첫번째 값을 5로 바꾸고 리스트 a를 출력합니다.
# slice 연산자를 활용하면 새로운 리스트를 저장할 수 있습니다.
# ===== 
b = a[:]

b[0] = 5
print(a)
[1, 2, 3]

list() 활용

# list 함수로 리스트 a를 복사하여 변수 b에 저장합니다.
# 리스트 b의 첫번째 값을 5로 바꾸고 리스트 a를 출력합니다.
# ===== 
b = list(a)

b[0] = 5
print(a)
[1, 2, 3]

하지만 이렇게 하는 것도 얕은복사! 이차원 리스트에선 적용 x

# 변수명이 a인 2차원 리스트를 만들어봅시다.
a = [1, 2, [1, 2]]

# slice 연산자로 리스트 a의 모든 요소를 변수 b에 저장합니다.
# 리스트 b의 index 2번째 리스트의 첫번째 값을 5로 바꾸고 리스트 a를 출력합니다.
# ===== 
b = a[:]

b[2][0] = 5
print(a)
[1, 2, [5, 2]]

# 내부에 있는 리스트까지 복사를 하기위해서 copy 모듈을 활용합니다.
import copy

a = [1, 2, [1, 2]]
b = copy.deepcopy(a)

b[2][0] = 3
print(a)

[1, 2, [1, 2]]

データ構造に適したBIF


.map(function, iterable)
ループ可能なデータ構造(iterable)のすべての要素に関数を適用し、結果を返します.returnはmap object形式です.

numbers = [1, 2, 3]

"".join(map(str, numbers))

# 위의 변수 numbers를 문자열 '123'으로 만드세요. (join 메서드 활용)

# 세제곱의 결과를 나타내는 함수가 있습니다.
def cube(n):
    return n ** 3
# 세제곱 함수를 각각의 요소에 적용한 결과값을 구해봅시다.
numbers = [1, 2, 3]

new_numbers = list(map(cube, numbers))

print(new_numbers)
[1, 8, 27]
.filter(function, iterable)
iterableは、関数が返す結果がtrueの結果のみを構成して返します.filter objectを返します.
# 홀수를 판별하는 함수가 있습니다.
def odd(n):
    return n % 2
    
# 홀수인 요소만 뽑아 new_numbers에 저장합니다.
numbers = [1, 2, 3]


new_numbers = list(filter(odd, numbers))

print(new_numbers)
.zip(*iterables)
複数のiterableオブジェクト(zip()を収集します.その結果、tupleの集合からなるzip objectが返されます.
girls = ['jane', 'ashley', 'mary']
boys = ['justin', 'eric', 'david']

pair = list(zip(girls, boys))

print(pair)
[('jane', 'justin'), ('ashley', 'eric'), ('mary', 'david')]

セット(set)


変更可能(可変)、順序なし(無秩序)、巡回可能(iterable)
.update(*others)
複数の値を追加します.
パラメータはiterableデータ構造を渡す必要があります.
# 변수명이 a인 세트를 만들어봅시다.
a = {'사과', '바나나', '수박'}

# update 메서드로 세트 a에 {'토마토', '토마토', '딸기'} 세트와 {'포도', '레몬'} 세트 인자 2개를 함께 입력 후 세트 a를 출력해봅시다.
a.update(["토마토", "토마토", "딸기"])


print(a)
{'수박', '딸기', '토마토', '바나나', '사과'}
.discard(elem)
集中からelemを削除すると、存在しなくてもエラーは発生しません.
# 변수명이 a인 세트를 만들어봅시다.
a = {'사과', '바나나', '수박'}

# discard 메서드로 세트 a에 '포도'와 '수박'을 각각 입력한 이후 세트 a를 출력해봅시다.
a.discard("포도")

에러 안남!

専制的


変更可能(可変)、順序なし(無秩序)、巡回可能(iterable)
Key:Valueペアのデータ構造
.update()

# 변수명이 my_dict인 딕셔너리를 만들어봅시다.
my_dict = {'apple': '사과', 'banana': '바나나', 'melon': '멜론'}


# update 메서드로 딕셔너리 my_dict의 key는 'apple', value는 '사과아'를 입력해봅시다.


my_dict.update({"apple": "사과아"})


print(my_dict)

{'apple': '사과아', 'banana': '바나나', 'melon': '멜론'}

全員と梱包する


http://hleecaster.com/python-venv/
仮想環境
モジュール:pyファイル単位で作成されます.
パッケージ:特定の機能に関連する複数のモジュールの集合.パッケージには、他のサブパッケージも含まれます.
Python標準ライブラリ:Python標準ライブラリ(Python Standard Library,PSL)は、内蔵モジュールと内蔵関数の組合せです.
パッケージマネージャ(pip):PyPIに格納されている外部パッケージのインストールを支援するパッケージです.

OOP


https://wikidocs.net/28
Jupeterノートパソコンの確認
1.1インスタンス変数
インスタンスのプロパティ(attribute)
インスタンスごとの一意の変数
ジェネレータメソッドでself.変数名の定義
インスタンスを作成したインスタンス.変数名によるアクセスと割り当て
class Person:

    def __init__(self, name):    # 인스턴스 메서드 (생성자) 
        self.name = name         # 인스턴스 변수

1.2クラス変数
クラスのプロパティ(attribute)
すべてのインスタンスの共有
クラス宣言で定義
クラス.変数名によるアクセスと割り当て
class Circle:
    pi = 3.14

print(Circle.pi)

2.1ネーミングスペースのナビゲーション順序
クラスを定義すると、クラスを作成しながらネーミングスペース(namespace)が作成されます.
インスタンスを作成すると、インスタンスオブジェクトが作成され、対応するネーミングスペースが作成されます.
インスタンスのツリー図が変更された場合、変更されたデータはインスタンスオブジェクトのネーミングスペースに保存されます.
すなわち、インスタンスが特定のビューにアクセスしている場合は、インスタンス=>クラスでナビゲートします.
3.1実例方法
インスタンスの使用方法
クラスで定義されたメソッドのデフォルト値は、インスタンスメソッドです.
呼び出し時にインスタンス自体selfが最初のパラメータとして渡される

class MyClass:
    def instance_method(self, arg1, arg2, ...):
        ...

my_instance = MyClass()
# 인스턴스 생성 후 메서드를 호출하면 자동으로 첫 번째 인자로 인스턴스(my_instance)가 들어갑니다.
my_instance.instance_method(.., ..)  

3.2クラスメソッド(class method)
クラスの使用方法
@classmethod Decorator定義の使用
呼び出し時にクラスclsが最初のパラメータとして渡される

class MyClass:
    @classmethod
    def class_method(cls, arg1, arg2, ...):
        ...

# 자동으로 첫 번째 인자로 클래스(MyClass)가 들어갑니다.
MyClass.class_method(.., ..) 


3.3静的方法
クラスの使用方法
@staticmethod decorator定義の使用
呼び出し時にselfとclsは渡されません

class MyClass:
    @staticmethod
    def static_method(arg1, arg2, ...):
        ...

# 아무런 일도 자동으로 일어나지 않습니다.
MyClass.static_method(.., ..)

インスタンスとメソッド
インスタンスは、3つのメソッドに同時にアクセスできます.
ただし、インスタンスは、実行されるすべての操作をインスタンスメソッドに限定します.
インスタンス内のクラスメソッドと静的メソッドは、できるだけ呼び出さないでください.(可能!=使用)
クラスとメソッド
クラスの行為は以下の原則に従うべきである.(クラスメソッドと静的メソッド)
クラス自体(cls)とそのプロパティにアクセスする必要がある場合は、クラスメソッドとして定義します.
クラスとクラスのプロパティにアクセスする必要がない場合は、静的メソッドとして定義します.
静的メソッドはcls、selfなどの最初のパラメータを受け入れません.
継承はジューピーター確認