Python基本構文メモ

正月休暇長かったですね。正月休暇でPythonの構文忘れていませんか?私は忘れました。orz…
記憶の引き出し用に構文メモを作成しました。

変数の宣言

pythonでは変数に値を代入すると型は自動振り分けされるが、明示的に型を指定することも可能

int型の宣言

a=1
print(type(a)) # <class 'int'>

# int型の明示
a: int = 1

str型の宣言

b="b"
print(type(b)) # <class 'str'>
b='b'
print(type(b)) # <class 'str'>
# ”でも’でもよい

# str型の明示
a: str = "a"

list型の宣言

c=[1,2,3]
print(type(c))    # <class 'list'>
print(type(c[0])) # <class 'int'>

c=["a","b","c"]
print(type(c))    # <class 'list'>
print(type(c[0])) # <class 'string'>

空のListを宣言

l=[]
print(type(l))    # <class 'list'>

値が入っている配列を用意する

li=[1]*5          # 1 が入っている箱を5つ用意する
print (li)        # [1, 1, 1, 1, 1]
print (type(li))  # <class 'list'>

# 配列の値は後から変更可能
li[1] = 2
print (li)        # [1, 2, 1, 1, 1]

特殊な定義

# Forを使って一気に配列を作成
li=[i for i in range(1, 6)]   # [1, 2, 3, 4, 5]

# Rangeを使って一気に配列を作成
li = list(range(0,10,2))     # [0, 2, 4, 6, 8]

標準入力(input)

キーボードで入力した値をそのまま変数に入れます。(c言語のscan関数と同じ)
inp = input()
123
print(inp)
123

inp = input("要素数を入力してください: ")
要素数を入力してください: 234
print(inp)
234

標準出力(print)

pythonでは、printの後に()をつけないとエラーになります。

a=1
print(a)
a

a=1
b="b"
print (a ,"and", b)
1 and b

マッピング処理

map関数による分割

スカラ変数をList型に変換してくれる。変換する型は指定する必要がある。

b="12345"
li=map(int,b)         # strに分割することも可
print(list(li))       # [1, 2, 3, 4, 5]

スカラ型で受け取ることもできる(要素数に注意)
b=[2,3,4]
c,d,e = map(int,b)
print(e,":",d,":",c)
4 : 3 : 2

split関数による分割

b="1:2:3:4:5"
li=b.split(":") # 区切り文字を指定
print(list(li))
['1', '2', '3', '4', '5']

スカラ型で受け取ることもできる(要素数に注意)
b="2@3@4"
c,d,e = b.split("@")
print(c,":",d,":",e)
2 : 3 : 4

数値の処理

小数点以下がある数値は、設定しなければfloatで演算
a=10.1
print (a)         # 10.1
print (type(a))   # <class 'float'>

●小数点以下切り捨て
print (int(a))    # 10

●小数点以下切り上げ
import math
print (math.ceil(a)) # 11

●指定桁数切り捨て
n = 3.14159
rn = round(n, 2)
print(rn)        # 3.14

●表示フォーマットで桁数を指定する
n = 3.14159
print(f"{n:.2f}") # 3.14

文字列の処理

●連結
print("abc" + "def")     # abcdef
print("abc" * 3)         # abcabcabc

str = "+".join("abc")
print(str)               # a+b+c

●インデックス取得
str = "abcdef"
first_str = str[0]    # 最初の文字を取得
last_str = str[-1]    # 最後の文字を取得

●変換 List型からスカラ
list=["A","B","C"]
s = " ".join(list) # A B C
※int 型が入っているとエラー
list=["A","B","C",4]
print(" ".join(list))
Traceback (most recent call last):
File "", line 1, in
TypeError: sequence item 3: expected str instance, int found

●文字列のインデックス指定取得
str= "ABCDE"
print (str[2:3])         # CD
#3~4番目を取得

●replace関数
構文 REPLACE_STRING = (String).replace([FROM_STR,TO_STR])

str = "A_C"
print (str.replace("_","B")) # ABC
print (str)              # A_C

●大文字 <-> 小文字変換
a = "abc"
print(a.upper()) # "ABC"
print(a.lower()) # "abc"

●検索
if("x" in "abcdefg") -> False
if("A" in "abcdefg") -> True
if("a" in "abcdefg") -> True

print("abcdefg".find("A".lower()) -> 0 #あるよ
print("Abcdefg".find("A".lower()) -> -1 #ないよ

辞書型(Dictionary型)の処理

●定義、使い方
dic ={"A":"4" ,
    "B":"6" ,
   "C":"2" ,
    "D":"2" ,
   "E":"3" }
print (dic.get('A')) # 4
定義 ※key はint string どちらも可能

●key一覧
print (dic.items()) # dict_items([('A', '4'), ('B', '6'), ('C', '2'), ('D', '2'), ('E', '3')])

●要素の追加
dic["F"] = "5" 
print (dic) # {'A': '4', 'B': '6', 'C': '2', 'D': '2', 'E': '3', 'F': '5'}

●要素の削除
del dic["F"]
print (dic) # {'A': '4', 'B': '6', 'C': '2', 'D': '2', 'E': '3'}

●pop(getとdelを同時に行う)
rv = dic.pop("C")
print (dic)  # {'A': '4', 'B': '6', 'D': '2', 'E': '3'} # "C"が削除されている

●ソートしてdic -> List
Valueで昇順ソート (reverse=Trueで降順)
sorted_list = sorted(dic.items(), key=lambda item: int(item[1]), reverse=False)
print(sorted_list) # [('C', '2'), ('D', '2'), ('E', '3'), ('A', '4'), ('B', '6')]

●Keyで昇順ソート (reverse=Trueで降順)
sl = sorted(dic.items(), key=lambda item: item[0], reverse=False)
print(sl)
[('A', '4'), ('B', '6'), ('C', '2'), ('D', '2'), ('E', '3')]

繰り返し(For)文

●構文
for [TEMP] in [range(START,STOP,STEP(def:1))]:
# ループ処理

●回数指定繰り返し
for i in range(5): # :を忘れがち
… print(i)
0
1
2
3
4

●10~20(未満)の偶数
for i in range(10,20,2):
… print(i)     # 10 12 14 16 18
# stepに負数を指定すれば逆もできる

●listの中身分だけ繰り返し
li=[1,2,3,4]
for i in li:
… print(i)
…
1
2
3
4

●dicのアイテム数だけ繰り返し
for k, v in dic.items():
… print(f"{k},{v}")
…
A,4
B,6
C,2
D,2
E,3

条件(IF)文

●構文
if [条件1]:
    # 条件1が真の処理
elif [条件2]:
    # 条件2が真の処理
else:
    # 真以外の処理

●例
x = 10
if x>10:
    print("xは10より大きい")
elif x>5:
    print("xは5より大きく10以下")
else:
    print("xは5以下")

switch文

python3.10以降で実装

value = 2
match value:
    case 1:
        print("Case 1")
    case 2:
        print("Case 2")
    case 3:
        print("Case 3")
    case _:
        print("Default case")

List型

●リスト内包表記によるlistの値変更
ns = [1, 2, 3, 4, 5]
dl = [x * 2 for x in ns]
print(dl)
[2, 4, 6, 8, 10]

●要素の追加
ns = [1, 2, 3, 4, 5]
ns.append(6)
print (ns) # [1, 2, 3, 4, 5, 6]

●listの挿入
li = [1,2]
li.insert(1,4) # index1に 4 を挿入
print (li) # [1, 4, 2]

●要素の削除 remove
li = [1,2]
li.remove(1) # 削除したいindexを指定
print(li) # [2]

●pop
li = [1,2]
print(li.pop(1)) # 2 # get(index)した値をlistから削除
print(li) # [1]

●最大値
print(max(ns)) # 5

●最小値
print(min(ns)) # 1

●合計値
print(sum(ns)) # 15

●要素数
print(len(ns)) # 5

●昇順ソート
print(sorted(ns)) # [1, 2, 3, 4, 5]

●降順ソート
ns.reverse()
print(ns) # [5, 4, 3, 2, 1]

●条件(ALL) AND 演算
# すべてTrueならTrue
li = [True, True, True]
print(all(li)) # True
li = [True, True, False]
print(all(li)) # False

●条件(ENY) OR 演算
# どれかがTrueならTrue
li = [False, False, True]
print(all(li)) # True
li = [False, False, False]
print(all(li)) # False

●カウント
指定した値が何回出てくるか
li = [1, 2, 2, 3, 3, 3]
print(li.count(2)) # 2

●インデックス
li = ["AA", "DD", "EE", "GG", "DD", "BB"]
print (li.index("DD")) # 1 ※2番目の要素
●コピー
li = [1,2]
li2 = li.copy()
print(li2) # [1, 2]
●clear 全要素の削除
li = [1,2]
li.clear()
print(li) # [] # listが削除された

関数の定義

●構文
def 関数名([引数1,引数2…]):
関数内の処理

※デフォルト引数を指定可能
def add(a=2):
return a*2

●例
def add(a, b):
… return a + b
r = add(2,3)
print (r) # 5

●関数内には独自のスコープが割り当てられる
def add(a, b):
… a=1 # ここで引数を変更しても
… return a + b
a=2
print(add(a,3))
print(a) # 2 # ※グローバル変数は1にならない

●listによる参照引き渡しを行うと、関数内でも値の変更ができる
li=[3]
def add(p):
… p[0]=5
…
print (li)   # [3]
add(li)
print (li)   # [5]

クラスの宣言

class Player:
    def walk(self):
        print ("11")

Player1 = Player()
Player1.walk()

class Player:
    def init(self,job):
        self.job = job
    def walk(self):
        print ("11" + self.job)

player = Player("aaa")
player.walk()

サンプル(よく使う処理)

●string -> list化
input_line = input()
input_list = list(input_line)

●split取得
input_line = input()
input_list = input_line.split(" ")

●1文字目の取得
input_line = input()
input_list = list(input_line)
first_str = input_list[0]
res_flg = False

●listからスカラ
li=["A","B","C"]
" ".join(li)
"A B C"

●数値list を一覧表示
li = [1,2,3,4,5]
print(" ".join(str(ss) for ss in li))
1 2 3 4 5

●深層コピー(参照をしない)
import copy
co_list = copy.deepcopy(or_list)