Pythonコードの最適化のヒント

この記事では、Faster Python Codeのための興味深い最適化のヒントをいくつか説明します。これらのテクニックはpythonコードでより速く結果を生み出すのを助けます。

🐶Pythonコードの例を示すで

# Python program to illustrate library functions
# save time while coding with the example of map()
import time

# slower (Without map())
start = time.clock()  
s = 'codes'
U = []
for c in s:
    U.append(c.upper())
print U
elapsed = time.clock()
e1 = elapsed - start
print "Time spent in function is: ", e1

# Faster (Uses builtin function map())
s = 'codes'
start = time.clock()  
U = map(str.upper, s)  
print U
elapsed = time.clock()
e2 = elapsed - start
print "Time spent in builtin function is: ", e2

🐶動画で動作確認してみよか?

動画で確認

パッケージはプラットフォーム固有です。つまり、使用しているプラ​​ットフォームに適したパッケージが必要です。文字列操作をしている場合は、目的のために高度に最適化されたdequeのような既存のモジュール 'collections'を使用することを検討してください。

🐶Pythonコードの例を示すで

# Python program to illustrate
# importing list-like container with  
# fast appends and pops on either end
from collections import deque
s = 'code'

# make a new deque
d = deque(s)

# add a new entry to the right side
d.append('y')

# add a new entry to the left side
d.appendleft('h')  
print d

d.pop() # return and remove the rightmost item

d.popleft() # return and remove the lefttmost item

# print list deque in reverse
print list(reversed(d))  

🐶動画で動作確認してみよか?

動画で確認

🐶Pythonコードの例を示すで

# importing iteration tools
import itertools
iter = itertools.permutations([1,2,3])
print list(iter)

🐶動画で動作確認してみよか?

動画で確認

🐶Pythonコードの例を示すで

# Python program to illustrate
# using keys for sorting
somelist = [1, -3, 6, 11, 5]
somelist.sort()
print somelist

s = 'codes'
# use sorted() if you don't want to sort in-place:
s = sorted(s)
print s

🐶動画で動作確認してみよか?

動画で確認

どちらの場合も、Listはキー引数の一部として選択したインデックスに従ってソートされます。この方法は、文字列でも数値と同じように機能します。

🐶Pythonコードの例を示すで

# Python program to illustrate using
# optimized loops for faster coding

# slow O(n^2) - ( Note: In latest implementations it is O(n) )
s = 'hellocodes'
slist = ''
for i in s:
    slist = slist + i
print slist

# string concatenation (idiomatic and fast O(n))
st = 'hellocodes'
slist = ''.join([i for i in s])
print slist

# Better way to iterate a range
evens = [ i for i in xrange(10) if i%2 == 0]
print evens

# Less faster
i = 0
evens = []
while i < 10:
    if i %2 == 0: evens.append(i)
        i += 1
print evens

# slow
v = 'for'
s = 'codes ' + v + ' codes'
print s

# fast
s = 'codes %s codes' % v
print s

s(i)へのループを実行するたびに、Pythonはメソッドを評価します。しかし、評価を変数に入れると、その値はすでにわかっているので、Pythonはタスクをより速く実行できます。

🐶Pythonコードの例を示すで

# Python program to illustrate trying
# multiple coding approaches  
# for getting faster result
# slower
mydict = {'g':1,'e':1,'e':1,'k':1}
word = 'coderecipe'
for w in word:
    if w not in mydict:
        mydict[w] = 0
    mydict[w] += 1
print mydict

# faster
mydict = {'g':1,'e':1,'e':1,'k':1}
word = 'coderecipe'
for w in word:
    try:
        mydict[w] += 1
    except KeyError:
        mydict[w] = 1
print mydict

🐶動画で動作確認してみよか?

動画で確認

どちらの場合も出力は同じです。唯一の違いは、出力の取得方法です。

🐶Pythonコードの例を示すで

# slower
x = [i for i in range(0,10,2)]
print x

# faster
x = [i for i in xrange(0,10,2)]
print x

🐶動画で動作確認してみよか?

動画で確認

xrange()は一度に1つの整数要素しか生成しないため、これによってシステムメモリを節約できます。 range()とは対照的に、List全体が得られます。これは、ループ処理に不要なオーバーヘッドです。

🐶Pythonコードの例を示すで

# Python program to illustrate swapping
# of a variable in one line  

# slower
x = 2
y = 5
temp = x
x = y
y = temp
print x,y

x,y = 3,5
# faster
x, y = y, x
print x,y

🐶動画で動作確認してみよか?

動画で確認

🐶Pythonコードの例を示すで

# Python program to illustrate trying
# to use local variables to make code
# run faster
class Test:
    def func(self,x):
        print x+x

# Declaring variable that assigns class method object
Obj = Test()
mytest = Obj.func # Declaring local variable
n = 2
for i in range(n):
    mytest(i) # faster than Obj.func(i)

🐶動画で動作確認してみよか?

動画で確認

Last Updated: 5/19/2019, 1:46:25 AM