Python の内包表現と演算子と。


みむらです。

最近ちょっと 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() のように、引数なしだと要素数が返ってくるということはなく、
「引数が足らない!」としかられるだけなので注意。


 

関連記事


コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Private