(自分メモ)pythonの基本的な文法で暗記したいこと
はじめに
自分がpthonの基本を忘れないように、自分向けに書く。
※このページを見て頂いた方すみません。完全な初心者向けではありません。
また、よく知っている人向けに、特別なことは書いていません。
コメントアウト
すべての言語で、最初に覚えなければならないのは「コメントアウト」ですね。
#コメントアウト
他の記載方法もあるようですが、#だけ覚えれば十分
シーケンス
次はシーケンス。これは簡単。箱のイメージです。
・右から、取得するときは、正数。
・左から、取得するときは、負数。
になる。
num | 0 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|---|
左から | 0 | 1 | 2 | 3 | 4 | 5 |
右から | -6 | -5 | -4 | -3 | -2 | -1 |
※一番左が0。一番右が-1であることがポイントです。
num="012345"
#左から「2番目」を取得 ※左から見たとき、一番左は「0番」
a1=num[1]
# '1'
#一番「右」を取得 ※右から見たとき、一番右は「-1番」
a2=num[-1]
# '5'
#「右」から「6番目」を取得
a3=num[-6]
# '0'
スライス(基本1)[start:stop]
スライス(変数の後ろの [])はpython独自(?)の使い方ができる。
しかもみんな結構使っている。(PG文書の省略に役立つ)
ただpython初心者(他PG経験者)には、配列にしか見えないので解読を難解にする。
これより先に関数を覚えても、スライスでつまずく。
次のような書き方ができる。
・変数 [start:stop]
num="012345"
#「3番目~」を取得 <「:」と「~」の関係に注目
a1=num[3:]
# '345'
#「~3番目」を取得
a2=num[:3]
# '012'
#「3番目~5番目」を取得
a3=num[3:5]
# '34'
・・・って、ちょっと待って!。なんで'345'じゃないの?
それは、順番の数え方が次の通りだから。。。
num | 0 | 1 | 2 | 3 | 4 | 5 | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
start | 0 | 1 | 2 | 3 | |||||||||
stop | 0 | 1 | 2 | 3 | 4 | 5 | 6 |
なので、次の通りになる
num="012345"
a3_1=num[3:4]
# '3'
a3_2=num[3:3]
# ''
スライス(基本1.5)[start:stop]逆数
マイナスを使うと、左からカウントしてくれる。
ExcelのRight関数のような感じですね。
そして、±を組み合わせると、文字列の中間地点などを取得することもできる。
+とマイナスの判断位置は表にすると次の通りである。
num | 0 | 1 | 2 | 3 | 4 | 5 | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
右から | 0 | 1 | 2 | 3 | 4 | 5 | 6 | ||||||
左から | -6 | -5 | -4 | -3 | -2 | -1 |
num="012345"
# 後ろの2つ[だけ]欲しい
a1=num[-2:]
# '45'
# 後ろの3つ[だけ]欲しいが、最後の1つは不要
a2=num[-3:-1]
# '34'
# 前1つ不要。後ろ1つ不要
a3=num[2:-2]
# '234'
# 後ろから5つ、前から5つの交差する範囲が欲しい <需要ある?
a3=num[-5:5]
# '1234'
スライス(基本2)[start:stop:step]
stopの後ろに、 step という項目を追加することで、面白いことができます。
・変数 [start:stop:step]
#「2個飛ばし」で取得 ※0から始まるので、たまたま偶数になった
num="0123456789"
a1=num[::2]
# '024'
#「逆順(後ろから順番)」に表示
a2=num[::-1]
# '543210'
スライス(応用)
#あえてスライスを記入して、元と同じように表示するに次の通り(デフォルト値?)
num="0123456789"
a1=num[0::1] #a
# '0123456789'
#組み合わせても使える
#「逆順」にして「2個飛ばし」で取得。「逆順」にする。
a2=num[::-1][::2][::-1]
# '13579'
##987654321 → 97531 → 13579 と変化している
#リスト型でも使える。「2個飛ばし」で取得
numl=[0,1,2,3,4,5,6,7,8,9]
n1=numl[::2]
# [0, 2, 4, 6, 8]
参考
スライスについて、細かく知りたい方はこちらが良いかと思います。
https://qiita.com/tanuk1647/items/276d2be36f5abb8ea52e
文字列検索・置換・比較
よくある感じ。簡単です。
num="0123456789"
#表示位置を取得する
foo=num.find("1")
# 1
#検索して指定した文字へ変換する
foo=num.replace("1","a")
# '0a23456789'
abc1="abc"
abc2="abc"
#単純比較は演算子で簡単
abc1==abc2
# True
#部分比較
"bc" in abc1
# True
「文字列⇒リスト」・「リスト⇒文字列変換」
区切り文字が「空白」というのがポイント
abc='a b c d e f'
#文字列⇒リストへ変換する。 ※空白区切り
abcl = abc.split()
# ['a','b','c','d','e','f']
#リスト(文字)⇒文字列に変換する ※空白区切り
a1=" ".join(abcl)
# 'a,b,c,d,e,f'
numl=[0,1,2,3,4,5,6,7,8,9]
#リスト(数字)⇒文字列に変換する ※空白区切り <mapで事前にstr型にするのがポイント
n1=" ".join(map(str,numl))
# '0 1 2 3 4 5 6 7 8 9'
join splitについて詳しくはこちら
https://techacademy.jp/magazine/28688
https://note.nkmk.me/python-split-rsplit-splitlines-re/
https://hydrocul.github.io/wiki/programming_languages_diff/string/join.html
文字を結合・余分な空白を消す
これも覚えれば簡単
st="hello"
ed=" world"
#2つの文字を結合
l1=st+ed
# 'hello world'
#余分な空白を消す
ed.strip()
# 'world'