ベスパリブ

ベスパもってないです。バイク買いました。

Python3

pathlibのファイル操作いろいろ

pathlibとは Python 3.4以上で推奨されているファイル・パス操作のモジュール。 os.path の代替となるモジュール。 docs.python.org 使い方をよく忘れるので備忘録です。 返り値はPathオブジェクトなので、文字列に変換したかったらstr()で囲んでやります。 …

Pythonでダイクストラ法

ダイクストラ法とは ダイクストラ法とは、「重み付きグラフにおける単一始点最短路アルゴリズム」 つまり、「始点s から各頂点i までの最短コストを求める」アルゴリズム。 使用条件は以下の通り。 負のコストがないこと 有向グラフ、無向グラフともにOK ベ…

Pythonの辞書(dict)のgetメソッドの速度を調べてみた

辞書(dict)でキーの存在確認をする際の方法としては、 in演算子を使いif文で条件分岐する get()メソッドを使う try exceptを使う(そんな人いるか?) の3種類くらいだと思います。 その中でもget()メソッドはワンライナーで書けて便利なのですが、速度的に…

Pythonのin演算子の計算量について

リスト(list)、タプル(tuple)、集合(set)、辞書(dict)にはin演算子がありますが、それぞれ計算量が違うようです。 python リスト、辞書、セット型のinを使った時の参照速度を調べてみた。 - Qiita Python Speed - www.peignot.net リスト(list) タプル(tuple…

Pythonでベルマンフォード法

ベルマンフォード法とは 蟻本によれば、「重み付き有向グラフにおける単一始点最短路アルゴリズム」 つまり、「始点s から各頂点i までの最短コストを求める」アルゴリズムです。 以下の条件で使えます。 DAG(有向グラフで閉路を持たない)である 負のコス…

PythonでUnion-Find木

Union-Find木とは Union-FindまたはDisjoint Setとは、蟻本の言葉を借りると「グループ管理のためのデータ構造」。 ・要素aと要素bが同じグループかどうか ・aが属するグループと、bが属するグループを併合(unite)する ということをしたいときに使います。 U…

Pythonのリスト操作のinsert(0, v)やpop(0)の計算コストはO(N)かかる

散々語り尽くされていますが、リストの先頭に対する要素の挿入(insert)や要素の削除(pop)の計算コストはO(N)かかります。このことは公式ドキュメントのcolections.dequeの説明に記載されていているのでその該当箇所を引用すると、 docs.python.org list …

RecursionError: maximum recursion depth exceeded in comparison の対策(Python3)

再帰関数を書いたら以下のエラーが発生した。 RecursionError: maximum recursion depth exceeded in comparison エラーで検索したら以下の記事にあたった。 Python3で再帰上限数の変更 - Qiita 書いてあるとおりに、ソースに以下のコードを追加したらなおっ…

condaのPackagesNotFoundError

condaで何かをインストールするときにPackagesNotFoundErrorが出るときの主な原因は、 (1) タイプミス (2) 探すリポジトリになかった (2)の場合は探すリポジトリを追加させます。 # condaが探すリポジトリ先の確認 $conda config --get channels # conda-for…

AtCoderSort

コード # coding: utf-8 class Person(): def __init__(self, rate, height, age, name): self.rate = rate # レート self.height = height # 身長 self.age = age # 年齢 self.name = name # 名前 def AtCoderSort(p, key, key_reverse=False): """ (1) ソ…

クラスに対するソート(Python)

やりたいこと class Person(): def __init__(self, _id, height, name): self._id = _id self._height = height self._name = name def solve(): N = 5 p = [None] * N p[0] = Person(5, 160, "うえだ") p[1] = Person(2, 140, "いいだ") p[2] = Person(4, 1…

state machineの話(あるいはPython3での実装)

Statechart このような記事を見つけました。 ステートマシン(state machine)実装のための本があることを初めて知りました。 ここで提案されている手法は、[* 状態変数を使うかわりに現在の状態を示す関数を使う]というものである。たとえば「あ」という状…

Python3でラズパイのIPアドレスを取得する

python上でifconfigコマンドを実行し、返ってきた結果にIPアドレスがあればそれを表示することを考えます。 "LANG=C ifconfig"とするとコマンド結果が全て英語で返ってきて、処理しやすくなります。 import subprocess subprocess.call(("LANG=C", "ifconfig…

Pythonのopen関数のencoding引数は必須でもいいんじゃない

たまにファイルの読み込み時(後?)にDecodeErrorする謎現象に遭いました。 どうやらファイルがShift-JISで書き込まれていたのをUTF-8で読み込もうとしていたのが原因。そういえばファイルをAtomで編集したときSJISで保存したかもしれない。うちのAtomは気…

python3.4.2のSSLContextのデフォルト引数はなんなのか

SSLContextのデフォルト引数 公式のリファレンスでは、3系ではpython3.5.3以降の情報しか掲載されていません。 ということで実際のソースを見ることにします。私の環境では以下のパスにありました。 /usr/lib/python3.4/ssl.py class SSLContext(_SSLContext…

utf-8とiso-2022-jpのencodeとdecodeのTips

半角英数字をUTF-8でencode >>> s = "aiueo012" >>> b = s.encode("utf-8") >>> b >>> b'aiueo012'これをdecodeする >>> b.decode("utf-8") 'aiueo012' >>> b.decode("iso-2022-jp") 'aiueo012'半角英数字をutf-8でエンコードしたものは、iso-2022-jpでデコ…

python3で文字列にlower()するとidが変わるという当たり前の話

文字列比較は is ではなくて == で比較しましょう、という話です。 >>> a = "hoge" >>> b = 'hoge' >>> a is b True >>> a.lower() 'hoge' >>> a.lower() is b False >>> a.lower() is a False …なぜ? どうやらlower()やupper()したらidが変わってしまう様…

python3でContent-Transfer-Encoding ヘッダを 変更するのに苦労した話

msg = MIMEText( main_text.encode("utf-8", "ignore"), 'plain', 'utf-8' ) 上のようなコードでメッセージを送信したとき、Content-Transfer-Encodingヘッダは7bitでした。 Content-Type: text/plain; charset="iso-2022-jp" MIME-Version: 1.0 Content-Tra…

python3では文字列中の部分文字列検索や辞書にキーが存在するかはin演算子を使おう

公式がそう言っているので、そうしましょう。 https://docs.python.jp/3/library/stdtypes.html 文字列中の部分文字列検索 注釈 find() メソッドは、 sub の位置を知りたいときにのみ使うべきです。 sub が部分文字列であるかどうかのみを調べるには、 in 演…

Pythonでclassの中にclassを作成する

class TemperatureHumidity: class Temperature: def __init__(self): self.value = None self.count = 0 def print(self): print("Temperature:", self.value, self.count) class Humidity: def __init__(self): self.value = None self.count = 0 def prin…

Pythonで親ディレクトリのファイルをインポート

実行スクリプトの親ディレクトリのファイルをインポートする - Pythonで遊ぶよ - pythonグループ長年これを探していました…!├hoge.py └tests/ └test_hoge.pytest_hoge.pyからhoge.pyをインポートします。test_hoge.py import os import sys sys.path.append…

anaconda4.3.0でfcntlのflock()が使えない

・Ubuntu14.04 LTS ・pyenvを使ってAnaconda4.3.0 (python3.6.0)をインストール で、fcntlモジュールのflock()等が使用できません。 " AttributeError: module 'fcntl'has no attribute "エラーが起きます。 $ python Python 3.6.0 |Anaconda 4.3.0 (32-bit)…