Edited at

Python Codeを優雅に

時々,あなたはVery CoolなPythonコードを見たことがあるでしょうか.

その単純さ,その優雅さに驚いています.

あなたは感心するしか仕方がありません.

このように書くことができるのか!とビックルする

Pythonicのスキルを身につけることができれば,Coolなコードを書くことができます.


"_"について

これはよく使う機能けど,少数の人がしかしらない.

ターミナルでコードを書いて結果を得たとき,変数をつけ忘れることがあるでしょうか.

このとき,"_"を使って一番近い結果を得ることができます.

>>> 10 * 2

20
>>> _
20


文字結合

文字を結合するとき,習慣的に"+"を結合で使う人がいますが,

for文でメモリがどんどん減らされ,力つきるます.

string = ['p','y','t','h','o','n']

# Bad
def fun(string):
all_string = ''
for i in string:
all_string += i
return all_string

# Good
def fun(string):
all_string = ''.join(string)
return all_string

>>> "python"


強大なzip()

zip関数はいろんな場面で活用することができます.


例1:行列をchange

a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# Bad
re_a = [[row[col] for row in a] for col in range(len(a))]

# Good
re_a = list(zip(*a))

>>> [[1, 4, 7], [2, 5, 8], [3, 6, 9]]


例2:dictのkeyとvalueをchange

a = {'a': 1, 'b': 2, 'c': 3, 'd': 4}

# Bad
def reverse_dict(a):
new_dict = {}
for k,v in a.items():
new_dict[v] = k
return new_dict

# Good
def reverse_dict(a):
k = a.keys()
v = a.values()
new_dict = dict(zip(v, k))
return new_dict

>>> {1: 'a', 2: 'b', 3: 'c', 4: 'd'}


変数の中身をChange

大学1年のC言語の授業が思い出す.

# Bad

tmp = a
a = b
b = tmp

# Good
a, b = b, a


リストの要素とインデックスを取得

a = [8, 23, 45, 12, 78]

for index, value in enumerate(a):
print(index , value)

0 8
1 23
2 45
3 12
4 78


1行で例外を得る

try:

pass
except (ExceptionA,ExceptionB,.....) as e:
pass


リストを同じ大きさのブロックに分ける

a = [1, 2, 3, 4, 5, 6]

list(zip( *[iter(a)]*2 ))

>>> [(1, 2), (3, 4), (5, 6)]


文字列を反転

a = 'Love Python'

#Bad
list_a = list(a)
list_a.reverse()
re_a = ''.join(list_a)

#Good
re_a = a[::-1]

>>> 'nohtyP evoL'


メモリとさらば

crash = dict(zip(range(10 **0xA), range(10 **0xA))) 

今回の「Python Codeを優雅にChange」は以上で終わります.

読んでいただいてありがとうございます.