追加:『下一桁は10で割った余り』
追加:map使った方が速いかもということで
例えば、90から110の範囲で一の位が「4」と「9」の場合は省く。
#!/usr/bin/env python # *-# -*- coding: utf-8 -*- def f(s, e): return "\n".join([str(i) for i in range(s, e + 1) if not str(i)[-1] in ["4","9"]]) print f(90,110)
実行結果
90 91 92 93 95 96 97 98 100 101 102 103 105 106 107 108 110
もっとスマートな方法あった気がする?(´・ω・`)
『下一桁は10で割った余り』
twitterで教えて頂きました。あざーす。
>>> 99 % 10 9 >>> 101 % 10 1 >>> for i in range(100, 111): ... print i % 10 ... 0 1 2 3 4 5 6 7 8 9 0
んで
def f(s, e): return "\n".join([str(i) for i in range(s, e + 1) if not i % 10 in [4, 9]]) print f(90,110)
こう?
map使った方が速いかもということで
実験というか計測してみた
#!/usr/bin/env python # *-# -*- coding: utf-8 -*- import timeit t1 = timeit.Timer(stmt=""" def f(s, e): return [str(i) for i in range(s, e + 1) if not str(i)[-1] in ['4', '9']] f(99, 1200) """) print t1.timeit(number = 1000) t2 = timeit.Timer(stmt=""" def f(s, e): return [str(i) for i in range(s, e + 1) if not i % 10 in [4, 9]] f(99, 1200) """) print t2.timeit(number = 1000) t3 = timeit.Timer(stmt=""" def f(s, e): return map(str, [i for i in range(s, e + 1) if not i % 10 in [4, 9]]) f(99, 1200) """) print t3.timeit(number = 1000)
実行結果
4.62032008171 2.56785511971 2.16774392128
mapのが速い
んで
def f(s, e): return "\n".join(map(str, [i for i in range(s, e + 1) if not i % 10 in [4, 9]]))
こうかな?