beet's soil

競プロのことなど

C++使いのためのPython3チートシート

うぃーんビートビートひるどwwwwwwうっくっくwwwwwwえいえいえt(←いずらいt)いえいwwwwらて。

はじめに

多倍長とUTF-8(というかASCII以外)を扱えるようになるために書きます。
クラスとかは触れないので別の記事を読んでください。
Python2系はもう死んだはずなのでここから先Pythonと書いたら3系のことを指します

本質:
docs.python.org

本当にPython3いる?

__int128_t に収まったりしない?
boost が使えるならboost::multiprecision::cpp_int でよくない?
(boostの多倍長は遅いのでPythonを使うべきということはある)
コピペありなら僕のライブラリ使えばよくない?(サンキューうっし)
github.com

変数

型は動的に決まる 明示的にキャストできる

x = 1
x = "a"
x = int("1333")

とか書ける きもい スコープはよくわからん ググって

速度

10^5くらいなら普通に回る PyPyならもうちょいいける
計算量に余裕がありそうなときだけ使うと精神衛生にいい

四則演算

+-*は一緒 デフォルトで多倍長なのでオーバーフローはあんま気にしなくていい
x / yは小数型にキャストされるので、C++っぽく切り捨てたいときは x // y とかく
ただし、C++とは違って常にfloorされる つまり -1 // 2 は -1 になる

あまりはx % y と書く C++とは違って、xが負のときでもx % yは非負になる

インクリメント

"++", "--" はない += 1 / -= 1をつかう

コメント

一行コメントは#

# comment

複数行はシングルクオーテーション3つ

'''
comment
'''
入力
input()

で文字列として一行読んでくる

文字列sに対して

s.split()

で空白で区切った文字列のリストが帰ってくる

リストlに対して

map(int, l)

でlの各要素に対してintでキャストする(mapは高階関数

組み合わせると

map(int, input().split())

となる

v = int(input())
a, b = map(int, input().split())
x = list(map(int, input().split()))

みたいに使う

出力

print()関数を使う

print("Hello World!")

自動で改行がはいるので、入れたくないときはendに空文字列を指定する

print("Hello World!", end='')

変数を出力するのは

print(a, b)
print('{} {}'.format(a, b))

とかでできる 詳しいフォーマット指定はググって

配列

list 使えばよさそう
a[i] で aのi番目の要素にアクセスできる(0-indexed)
C++使いなら負のindexとか普段使わないでしょ 使いたいならググって

ソート

list.sort() これは破壊的
元を壊したくないなら sorted(list)

dictとかsetとか

ググって

ループ

forとwhileがある forはC++でいうrange-based-forっぽい感じ

while cond:
  statement
for i in range(10):
  statement
range

range(X)と書くと[0,X)の要素からなるリストができるので回数指定のループができる

for i in range(10):
  statement

配列を一回ずつ見たければinの後に指定する 例えば総和なら 

sum = 0
for i in arr:
  sum = sum + i
条件式

!, &&, || の代わりにnot, and, orをつかう

ネスト

{}の代わりにインデントで表現する 普通はスペース2個か4個

for i in range(10):
  for j in range(100):
    ukunichia()
  tapuchan()
lattekun()

上の例だとukunichia()は1000回、tapuchan()は10回、lattekun()は1回呼ばれる

内包表記

C++に対応する機能がないから気にするな

関数

defキーワードを使う 再帰もできる 例えばGCDなら

def gcd(x, y):
  if x < y:
    t = x
    x = y
    y = x
  if y == 0:
    return x
  return gcd(y, x%y)
飽きた

🍊