みむらです。
最近ちょっと Python を触ってみようかとということで、
しばらくぶりに触っています。
ってことで忘れそうなことのメモ。
・・・Python をよく使っている人からするとぶん殴られそうな気がしますが、
とりあえず、勉強ということで躓いたところをメモしていきます。
内包表現:
[追加要素 for 変数 in リスト if 条件]
使い方としては、
l = ((0,1),(2,3),(4,5)) m = [i for (i,j) in l] >> (0,2,4)
みたいな。
なんとなく、C# だと、
var l = new[] { new[] { 0, 1 }, new[] { 2, 3 }, new[] { 4, 5 } }; var m = l.Select(i => i[0]);
みたいな感じ・・ですかね。
あとは条件式を加えて、
[i for (i,j) in l if i > 0]
みたいなやつに関しては
var l = new[] { new[] { 0, 1 }, new[] { 2, 3 }, new[] { 4, 5 } }; var m = l.Where(i => i[0] > 0).Select(i => i[0]);
みたいな感じ。
演算子のメモ:
割り算において “/” と “//” 演算子があって、
3.0/2.0 = 1.5
3.0//2.0 = 1.0
というように、”//” 演算子だと結果が整数に丸められる。
丸め方としては、
math.floor で丸めた時と同じ動作となるっぽい。
1.5 → 1.0
-1.5 → -2.0
考え方としては「負の無限大」方向に丸める。
データとして考えるなら、 0x0 の方向に丸める、と考えると良いのかもしれない。
(負数は2の補数表現で表現されることを考えてみると。)
逆に、 “0” 方向に丸める場合は、 int で括ると良い感じ。
ex. int(1.5 / 1.0)
1.5 → 1.0
-1.5 → –1.0
あとは round 関数で丸める方法なんてのもありますが、
これは昔書いた「銀行丸めと四捨五入。」を参照してください。
それと、 “**” 演算子が存在し、
これは C# で言うところの Math.Pow (べき乗計算)に該当。
ex.)
2**10 = 1024
要素数を数える:
私自身、ちょっとはまったのですが・・(汗
C++ だと hoge.size() とか書いて、
C# だと hoge.Length だったり、動的に求める必要がある物については hoge.Length() だったり。
Python の場合は、 len(hoge) で求まる。
また、 hoge.count() と叩くと「引数が足りない!」と怒られるんですが、
これは C# の hoge.Count(1) と同じで、要素内に指定されたものがいくつ入っているかを返すメソッド。
ただし、C# の hoge.Count() のように、引数なしだと要素数が返ってくるということはなく、
「引数が足らない!」としかられるだけなので注意。