ボンジニアの備忘録

凡人エンジニア、通称ボンジニアによる備忘録です。勉強した内容を書いていきます。ジャンル問わずです!間違っていたら指摘をお願いします!

便利だと思ったPythonのコード ※随時更新

内容

色々なPythonの本を読んで、感心した書き方をつらつらと書いていきます。必ずしもPython特有とは限りません。(というか他の言語はそんなに詳しくない)

数字の計算について

整数(切り捨て)

/が2つで整数(切り捨て)になる

>>> 9//5
>>> 1

文字列の操作について

文字列を末尾から表示する

>>> text='abcdefghijklmnopqrstuvwxyz'
>>> text[::-1]
>>> 'zyxwvutsrqponmlkjihgfedcba'

先頭の文字だけを大文字にする

>>> text = 'i am yujikawa'
>>> text.capitalize()
>>> 'I am yujikawa'

タイトル風に文字列を表現する

>>> text.title()
>>> 'I Am Yujikawa'

変数の入れ方について

リストの欲しいところとそうでないところに分ける

>>> data = ['I','am','yujikawa','!']
>>> a, *b = data
>>> a
'I'
>>> b
['am', 'yujikawa', '!']

>>> *a, b = data
>>> a
['I', 'am', 'yujikawa']
>>> b
'!'

>>> a,*b,c = data
>>> a
'I'
>>> b
['am', 'yujikawa']
>>> c
'!'

ifを使って変数に入れる場合、1行でかく方法

>>> x = 1
>>> y = 2 if x==1 else 3
>>> y
2
>>> x = 2
>>> y = 2 if x==1 else 3
>>> y
3

条件式について

変数が一つの場合の条件式の特殊な書き方

>>> x = 1
>>> 0 < x < 2
True

辞書(dict型)について

キーはイミュータブルのためタプルが使える

>>> gps = {(123,444,666): 'yujikawa house'}
>>> gps
{(123, 444, 666): 'yujikawa house'}

反復処理について

zipを使った反復処理(サイズが小さい方に合わせる)

>>> list1 = ['a','b','c']
>>> list2 = ['c','d']
>>> for x, y in zip(list1, list2):
...     print(x,y)
... 
a c
b d

zip_longest(itertools)を使った反復処理(サイズが大きい方に合わせる)

>>> from itertools import zip_longest
>>> for x,y in zip_longest(list1,list2):
...     print(x,y)
... 
a c
b d
c None

collentionsライブラリーについて

Counter()を使ってリストの要素数を数える

Counter同士であればdictの足し算や引き算ができます。

>>> from collections import Counter
>>> list1 = ['a','b','b','c']
>>> list1_counter = Counter(list1)
>>> list1_counter
Counter({'b': 2, 'a': 1, 'c': 1})

>>> list2 = ['a','c','c','c']
>>> list2_counter = Counter(list2)
>>> list2_counter
Counter({'c': 3, 'a': 1})
>>> list1_counter + list2_counter
Counter({'c': 4, 'a': 2, 'b': 2})