Python覚書き

2020年10月13日

データ型・変数・演算子

●ミュータブル(mutable):変更可能
●イミュータブル(immutable):変更不可
●イテラブル(iterable):反復可能
●シーケンス(sequence):順序を持つ(インデックスでのアクセスが可能)
●コンテナ(container):配下に複数の値を格納可能

●アンパック代入(一部の要素を切り捨てる)

test = [1, 2, 3, 4, 5]

a, _, b, _, c = test
print(a) #出力結果:1
print(b) #出力結果:3
print(c) #出力結果:5
print(_) #出力結果:4

●アンパック代入(入れ子のリスト)

test = [1, 2, [55, 56, 57]]

a, b, c = test
print(a) #出力結果:1
print(b) #出力結果:2
print(c) #出力結果:[55, 56, 57]

x, y, (z1, z2, z3) = test
print(x) #出力結果:1
print(y) #出力結果:2
print(z1) #出力結果:55
print(z2) #出力結果:56
print(z3) #出力結果:57

●変数値のスワッピング(入れ替え)

x = 88
y = 99
x, y = y, x
print(x, y) #出力結果:99 88

●Python3.8からの代入演算子「:=」
y = (x = 20) / 10 #Python3.7以前ではこの様な式は記述できなかったが・・・
y = (x := 20) / 10 #Python3.8では「:=」を使用する事で可能となった

エスケープシーケンス

●raw文字列(文字列の前に「r」付加)表記のままに解釈する文字列リテラル
例 print(r’C:\Program Files\MikuMikuDance\Data’)

●フォーマット文字列(文字列の前に「f」付加)文字列中に変数を埋め込み
toho = “魔理沙"
print(f’ゆっくり{toho}’) #出力結果は「ゆっくり魔理沙」

制御構文

●処理がない場合は「pass」を記述する

if x == 21:
    pass

●多岐分岐(elif)Pythonは「switch」命令なし

toho = "霊夢"

if toho == "魔理沙":
    print("ゆっくり魔理沙")
elif toho == "チルノ":
    print("ゆっくりチルノ")
else:
    print("ゆっくり霊夢")

●for文(インクリメント)

for i in range(1, 4):  # 1 ~ 3
    print(i)

●range関数

#0からN未満
    range(N)
#増分指定
    range(0, 10, 2) #出力結果:[0, 2, 4, 6, 8]
#減分指定
    range(5, 0, -1) #出力結果:[5, 4, 3, 2, 1]
    reversed(range(0, 10, 2)) #出力結果:「8, 6, 4, 2, 0」
#リスト化
    print(list(range(0, 5, 2))) #出力結果:[0, 2, 4]

●リスト内包表記

#2倍
data = [15, 43, 7, 59, 98]
data2 = [i * 2 for i in data]
print(data2) #出力結果:[30, 86, 14, 118, 196]

#文字変換
data3 = [str(i) for i in data]
print(data3) #出力結果:['15', '43', '7', '59', '98']

#条件指定
data4 = sum([i for i in data if i < 50])
print(data4) #出力結果:65

例外処理

try:
    TypeError('エラーです')
except (ValueError, TypeError) as ex:
    print('エラー指定')
else:
    print('エラー発生なし')
finally:
    print('必ず通る')

標準ライブラリ

●文字列の長さを取得する(文字数)len

toho = 'ゆっくり霊夢'
print(len(toho)) #出力結果:6

●文字列の長さを取得する(バイト数)unicodedata.east_asian_width(…)

import unicodedata

test = 'ゆっくりMarisa'
mojisu = 0

for ch in test
    if unicodedata.east_asian_width(ch) in 'FWA':
        mojisu += 2
    else:
        mojisu += 1

print(mojisu) #出力結果:14

●大文字・小文字変換

test1 = 'Yukuri Marisa'
test2 = 'yukuri reimu hakurei'

print(test1.lower())      #出力結果:yukuri marisa
print(test1.upper())      #出力結果:YUKURI MARISA
print(test1.swapcase())   #出力結果:yUKURI mARISA
print(test2.capitalize()) #出力結果:Yukuri reimu hakurei
print(test2.title())      #出力結果:Yukuri Reimu Hakurei

●部分文字列

test = 'あいうえおかきくけこ'

print(test[2])     #出力結果:う
print(test[2:5])   #出力結果:うえお
print(test[2:])    #出力結果:うえおかきくけこ
print(test[:5])    #出力結果:あいうえお
print(test[:])     #出力結果:あいうえおかきくけこ
print(test[-7:])   #出力結果:えおかきくけこ
print(test[-7:-5]) #出力結果:えお
print(test[::2])   #出力結果:あうおきけ  0文字目を基点に2文字おきに取得
print(test[1::2])  #出力結果:いえかくこ 1文字目を基点に2文字おきに取得
print(test[::-1])  #出力結果:こけくきかおえういあ  stepに負数 逆順

2020年10月13日Python,プログラム

Posted by こっぷ