pythonでコードゴルフしたのでまとめました。

の続きです。
今回はpythonに関して書きます。

python3(バージョンは忘れました)
で実行しています。

・文字操作はスライスを使う。
全部が全部という訳では無いですが、スライスを使うとグッと短くかけることがあります。
pythonコードゴルフにおいて、スライスの理解は必ず必要な気がします。

例えば、奇数番目の文字を取り出す場合
a[::2]
とかって書けます。変にfor文書くより短いですね。

・配列の宣言
正確にはリストの宣言かと思いますが...
一次配列を同じ値で初期化する場合
b=[0]*10
などと、掛け算で複数定義するのが多分最短です。
初期値が違う場合、初期値に法則性があるなら内包表記で書いた方が良かったりします。
a=[x for x in range(5)]
とかって書くと、
a=[0,1,2,3,4]になります。
コードゴルフだと、微妙に使いにくかったりしましたが、普通使いでは使えるとカッコいいですよね。

・深いコピー
リストaに対し、値bをいれる場合
a+=b
とかって書けます。
リストaに対し、リストbをいれる場合
a+=b
と書けますが、c言語でいうポインタを渡すことになるそうです。(浅いコピー)
そのため、上記の書き方だと後々bを変えた際にaのリスト内のリストも変わります。
おそらく、これは多くの場合嫌な動きです。

c言語でいう値渡しで書く必要があります。(深いコピー)
書き方は幾つかあると思いますが、おそらくコードゴルフ的にベストなのは
a+=b[:]
と、スライスを空打ちさせる方法です。

・cの小手先方を幾つか
前回のc編で書いたもののうち、言語依存でないものはpythonでももちろんつかえます。
ドモルガンとか、フラグをたてる際には論理和を使うとかです。

・まとめ
コードゴルフの開催期間中、多忙だったためpythonはあまり調べられていない。悔しい。
結構、コードゴルフ的なコツが色々ありそうでpythonでコードゴルフはハマりそうです。

この記事が気に入ったらサポートをしてみませんか?