アメリエフの技術ブログ

Amelieff Staff Blog

バイオインフォマティシャン的視点でPythonの組み込み関数について考えてみた

こんにちは、iijm-lです🌻
pythonのコーディングを始めてから1年が経ちました✨
だいぶ慣れてきましたが、慢心せずに立派なパイソニスタになりたい!🐰

f:id:iijm-l:20200911182044p:plain:w300
🐢の努力を見習っていきたいよね!

パイソニスタの皆様にお聞きします。
組み込み関数ってどれくらい覚えていますでしょうか?

私はopen()format()len()min()max()range()辺りはよく使います✨

Python3の公式ドキュメントを読んでみると、
なんと69個の組み込み関数が載っていました⭐️
そんなにたくさん知らない気がする!


そこで、今回は復習がてら

超個人的!意外と便利なPython組み込み関数・3選

について、アメリエフ社員ならではのバイオインフォマティクス的な活用方法も交えながら、発表します🥳


3位 all()とany()

all()

all()は、引数に指定したオブジェクトの全ての要素がTrueであれば、Trueを返す、という関数です。逆に1つでもFalseな要素があれば、Falseを返します。

>>> print(all([True, True, True]))
True
>>> print(all([True, False, True]))
False


PythonではboolTrue /False)を使った判定をよく行われますが、あるリスト内の全要素に対する条件判定が一気にできるのは、便利だし使いどころがありそうですね。

例えば、内包表記と組み合わせることで、数字や文字列の判定もスマートに行えます。

num_list = [40, 39, 35, 40, 38]

if all(i<=30 for i in num_list):
  print('全要素は30以上の値です!')
else:
  print('全要素は30以上の値ではありません...')


このような判定系関数は、バイオインフォマティクスで使うとすると、解析データのクオリティチェックに使えそうな予感がしますね。

any()

any()は、 先述のall()の逆で、引数に指定したオブジェクトの要素のうち、1つでもTrueであれば、Trueを返す、という関数です。逆に、全ての要素がFalseであれば、Falseを返します。
これもall()と同じくらい使えそう!

>>> print(any([True, False, False]))
True
>>> print(any([False, False, False]))
False



2位 zip()


zip()関数を使うと、複数のオブジェクトを同時にforループで処理することができます。

>>> fruit_list = ['apple', 'banana', 'cherry']
>>> color_list = ['red', 'yellow', 'red']
>>> for fruit, color in zip(fruit_list, color_list):
...     print(fruit, color)
...
apple red
banana yellow
cherry red


バイオインフォマティクスでも複数のデータを同時に処理することはよくあります。例えば、ペアエンドリードのシーケンスデータ等は2つで1セットなので、基本的にはzip()に入れて処理すると楽です。


1位 enumerate()


enumerate()は、forループの引数に指定したオブジェクトの要素と同時に、カウントを取得することができます。

通常のループ処理で、カウントしたい場合は以下のようになるかと思います。

>>> fruit_list = ['apple', 'banana', 'cherry']
>>> count = 0
>>> for fruit in fruit_list:
...     print(count, fruit)
...     count += 1
...
0 apple
1 banana
2 cherry


enumerate()関数を使うと、スマートに同じことができますよ!

>>> fruit_list = ['apple', 'banana', 'cherry']
>>> for count, fruit in enumerate(fruit_list):
...     print(count, fruit)
...
0 apple
1 banana
2 cherry


バイオインフォマティクスで使うときも、シーケンスリードの数や体細胞変異の数など、カウントする処理は多くありますので重宝しています。

また先述のzip()と組み合わせる技はよく知られています。私も何度もお世話になりました💫

>>> for count, (fruit, color) in enumerate(zip(fruit_list, color_list)):
...     print(count, fruit, color)
... 
0 apple red
1 banana yellow
2 cherry red



まとめ


3選と言いつつも、4つご紹介してしまいました。
組み込み関数は、importなしで使えて便利なものばかりなので、覚えておいて損はないですね😃
pythonの扱いが呼吸と同じようにできるその日まで、エリートパイソニスタへの道はまだまだ続く、、、(続)