3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Kaggle Courses 学習メモ(Python講座編)

Last updated at Posted at 2021-02-14

#概要

Kaggle公式のPythonチュートリアル(https://www.kaggle.com/learn/python) を遊び感覚で受講してみたら意外と知らないPythonのTipsがちらほらあったので,振り返りがてらメモ代わりに残しておきます.
無料なのに,コースの質と量が大学の講義並ですごい.

##docstringで関数の説明が書ける(JavaDoc的な)

def least_difference(a, b, c):
    """Return the smallest difference between any two numbers
    among a, b and c.
    
    >>> least_difference(1, 5, -5)
    4
    """
    diff1 = abs(a - b)
    diff2 = abs(b - c)
    diff3 = abs(a - c)
    return min(diff1, diff2, diff3)

#help(least_difference)の説明として表示される

VSCodeでサジェスト/マウスオーバーしたとき表示される説明文にもなる

スクリーンショット 2021-02-14 23.04.03.png

boolean以外をbooleanに変換したときの挙動

print(bool(1)) # 0以外はTrue
print(bool(0)) # 0はFalse
print(bool("asf"))#""(中身のない長さ0の文字列)以外はTrue
print(bool("asf"))#""はFalse
# 一般に,中身が空の時系列データ (strings, lists, listsやtuplesに類するもの)は"Falsey"(Falseっぽいという専門語)
# それ以外は"Truthy"(Trueっぽいという専門語)

##intに対するbooleanの演算

a=1
b=2

a or b#1
b or a#2

a and b#2
b and a#1

0 or a#False

式の評価はbooleanとして行う.Pythonのand/orは短絡評価.

式全体がTrueの場合は最後に評価した値が,Falseの場合はFalseが出てくる.

##booleanに対するintの演算

a=b=c=True
a+b+c#3

booleanにint演算をするとintで帰ってくる

文字列関係

##大文字小文字

claim = 'Pluto is a planet!'
#全部大文字にする
claim.upper()#'PLUTO IS A PLANET!'
#全部小文字にする
claim.lower()#'pluto is a planet!'

文字列探索

#マッチした場合一番最初のインデックスを返す
claim.index('plan')#11
#先頭の部分文字列マッチ
claim.startwith('Pluto')#True

左寄せ・センタリング・右寄せ

testlist=['a','bbb','ccccc']

for t in testlist:
  print(t.ljust(5)) 
#a    
#bbb  
#ccccc

for t in testlist:
   print(t.center(5))
#  a  
# bbb 
#ccccc

for t in testlist:
  print(t.rjust(5))
#    a
#  bbb
#ccccc

文字列の条件

#以下,空文字はfalseとなる
#含まれる文字が全てアラビア数字
'12345'.isdecimal()#True
#含まれる文字が全て「数字を表す文字」
''.isnumeric()#True
#含まれる文字が全て英数字
'm0ssyc4t'.isalpha()#True
#文字列全体が
#全部Ascii文字
'this is ascii'.isascii()#True
'†hîs îß asçîî'.isascii()#False

文字列の長さについて

文字列長はエスケープ用の特殊文字を無視して考える.
"It's ok" 'It\'s ok'が同一の文字列をさす(identical)ことを考えるとわかりやすい.

len("it's ok") #7
len('it\'s ok') #7

##フォーマット文字列関係
str.format()を使うのが一般的だが,個人的にはf-stringがコンパクトで好み.
ただし,f-stringはpython3.6〜でないと使えないので注意.

who_made_perl='Larry Wall'
who_made_python='Guido van Rossum'
print('Who made perl is {}.'.format(who_made_perl))#Who made perl is Larry Wall.
print(f'Who made python is {who_made_python}.')#'Who made python is Guido van Rossum.'

このフォーマッティングは,公式によると以下の書式設定子の書式に従って解釈される.

format_spec     ::=  [[fill]align][sign][#][0][width][grouping_option][.precision][type]
#fill            ... alignする時,埋めるのに使う文字.デフォルトは多分ホワイトスペースになる.
#align           ... 左詰め,中央寄せ,右詰めを選択可能.それぞれ<,^,>
#sign            ... 符号を付けるかどうか."+"で正負かかわらず符号をつけ,"-"で負数のみ符号を付け," "で負数のみ符号をつけ,正数先頭には空白を入れる
# "#"            ... 数値型の先頭に0xとか0bみたな進数表記を付ける.
# "0"            ... ゼロパディングする
#width           ... 最小の幅.
#grouping_option ... 千の位のセパレータに何を使うか.","か"_"が選べる.
#.precision      ... 小数点以下の表示される桁数.
#type            ... データの表現について.出力を2進数,8進数,10進数,16進数にしたい場合,それぞれb,o,d,x(またはX)を用いる.
#                    特殊な場合として,記数表記にしたい場合,e(またはE),
#                    固定小数点表記にしたい場合,f(またはF),
#                    パーセント表示にしたい場合,%とする.

ライブラリインポート

インポートするモジュールクラスのatrribute名,method名はdir()メソッドで確認できる

import math
dir(math) #['__doc__', '__file__', '__loader__',...,'tau', 'trunc', 'ulp']

#よく使うメソッドの便利引数
printメソッドはセパレータを変更できる

print(1, 2, 3, sep=' < ') #1 < 2 < 3

printメソッド呼び出し後に自動で入る文字はend引数で定義される.デフォルト引数はend='\n'であり,printメソッドを呼ぶ度に改行が入るのはこのため.

for i in range(4):
  print(i)
#0
#1
#2
#3

これを応用して,print後に改行をさせないようにするにはend=''とすればよい.

for i in range(4):
  print(i,end=" ")
#0 1 2 3 

maxメソッドはkey引数で指定したメソッドをmapできる

def mod5(num):
  return num%5

max(100,51,14,key=mod5) #14

roundメソッドはndigits引数で指定した桁数で丸めれる

round(54321.12345,-2) #54300.0

複素数

a=12
a.imag #0
b=12+3j
b.imag #3.0

複素数を使って昔解いたAtCoderのABC108 B問題を書き換えてみる.

#x2を中央揃えする
x2 -= chuoux
y2 -= chuouy
 
#90度回転
x3= -y2
y3 = x2
 
#90度回転
x4= -y3
y4 = x3

雑すぎる.もしこうやって雑にやるにしても,最低限x3,y3のペアは構造体なりクラスなりにまとめて扱いたい.

修正後の結果はこちら

#x2を中央揃えする
b-=chuou
 
#90度回転
c=b*(1j)
d=c*(1j)

いい感じ.

##おわりに

コースを全部履修した所,そこそこ立派な認定証がもらえました.
スクリーンショット 2021-03-03 17.10.40.png

やったね!

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?