あるとちょっと使えるかもしれないPythonのプログラム
思い立ったら追加していく
プログラムは全て関数にしてあるので、使うときは「 関数名(入力) 」とする。
1,全角文字 → 半角文字 に変換する
2,半角文字 → 全角文字 に変換する
3,リスト内での登場回数をカウントして辞書型にして出力
4,リスト内の空き要素を削除する
5,リスト内の特定の文字を別の文字に置き換える
6,文字列の中で複数の文字を同時に置き換える
7,階乗(n!)を計算する
8,組み合わせ(C)を計算する
9,順列(P)を計算する
10,二項定理を計算する
11,リストから平均を求める
12,リストから分散を求める
13,リスト内の総乗(全ての掛け算)を計算する
14,ある関数の任意の点における傾きを求める
15,10 進数を n 進数に変換する
1. 全角文字 → 半角文字 に変換する
hankaku(文字列)
hankaku = lambda xs : xs.translate(str.maketrans({chr(0xFF01 + i): chr(0x0021 +
i) for i in range(94)}))
実行結果:
hankaku("ABC(>O<)123")
>> "ABC(>O<)123"
2. 半角文字 → 全角文字 に変換する
zenkaku(文字列)
zenkaku = lambda xs : xs.translate(str.maketrans({chr(0x0021 + i): chr(0xFF01 +
i)
for i in
range(94)}))
実行結果:
zenkaku("abc(>o<)123")
>> "ABC(>O<)123"
3. リスト内での登場回数をカウントして辞書型にして出力
list_count(リスト)
def list_count(xs:list, *, re=dict()):
for x in
xs:
re[x] = 1 if
not x in re else re[x] +
1
return re
実行結果:
list_count([1, 1, 1, 2, 2, 3])
>> {1:3, 2:2, 3:1}
4. リスト内の空き要素を削除する
bye_none(リスト)
bye_none = lambda xs : [x for x
in [y for y in xs if y != None] if len(str(x)) != 0]
実行結果:
bye_none(["abc", "", None, 7])
>> ["abc", 7]
5. リスト内の特定の文字を別の文字に置き換える
rep(リスト, 置き換える文字, 置き換えた結果)
def rep(xs:list, before="", after="", *,
re=[]):
for x in
xs:
try:
re
+= [x.replace(before, after)]
except:
re
+= [x]
return re
実行結果:
rep(["abcd", "aaabbb"], "a", "b"])
>> ["bbcd", "bbbbbb"]
6. 文字列の中で複数の文字を同時に置き換える
rep_list(文字列, 置き換える文字リスト, 置き換え結果リスト)
def rep_list(xs:str, before=[""],
after=[""], *, re=""):
if(len(before) == len(after)):
for x
in xs:
if(x
in before):
for i in range(len(before)):
if(x == before[i]):
re
+= after[i]
else:
re
+=
x
else:
re = xs
return re
実行結果:
rep_list("aabbccdd", ["a", "c", "d"], ["c", "a", ""])
>> "ccbbaa"
7. 階乗(n!)を計算する
fac(整数)
def fac(n:int, *, fi=1):
if(n <=
fi):
return
fi
return
n*fac(n-1, fi=fi)
実行結果:
fac(5)
>> 120 ( ※ 5! = 120 )
8. 組み合わせ(C)を計算する
aCb = comb(a, b)
def comb(a:int, b:int, *,
re=1):
for i
in
range(b):
re *=
(a-i)/(b-i)
return re
実行結果:
comb(5, 2)
>> 10.0 ( ※ 5C2 = 10 )
9. 順列(P)を計算する
aPb = perm(a, b)
def perm(a:int, b:int, *,
re=1):
for i
in
range(b):
re *=
(a-i)
return
re
実行結果:
perm(10, 3)
>> 720 ( ※ 10P3 = 720 )
10. 二項定理を計算する
(a+b)^n = bino(a, b, n)
def bino(a:int, b:int,
n:int, *, re=0, bf=1):
for k in
range(n+1):
_bf
= bf
for i
in range(k):
_bf
*=
(n-i)/(k-i)
re
+= _bf*(a**k)*(b**(n-k))
return re
実行結果:
bino(1, 2, 3)
>> 27.0 ( ※ (1+2)^3 = 27 )
11. リストから平均を求める
avg(リスト)
avg = lambda ns :
sum(ns)/len(ns)
実行結果:
avg([1, 2, 3, 0.5])
>> 1.625
12. リストから分散を求める
div(リスト)
def div(ns:list,
*, re=0):
av = sum(ns)/len(ns)
for n in
ns:
re
+= abs(av-n)**2
return re/len(ns)
実行結果:
div([1, 2, 3, 0.5])
>> 0.921875
標準偏差を求めたければこれの平方根を取れば良い
13. リスト内の総乗(全ての掛け算)を計算する
prod(リスト)
def
prod(ns:list, *, re=1):
for n in
ns:
re
*= n
return re
実行結果:
prod([1, 2, 3, 0.5])
>> 3.0 ( ※
1*2*3*0.5 =
3 )
14. ある関数の任意の点における傾きを求める
diff(xの値, 式)
def
diff(x, f=None, *,
d=1e-10,
keta=5):
return None
if f ==
None else ((
f(x+d)
- f(x) )/d) // 10**(-1*keta) /
10**keta
実行結果:
diff(2, lambda x:x**2)
>> 4.0 ( ※
d/dx(x^2) = 2x; x=2 -> 2x=4 )
または
def f(x):
return 2*(x**3)
diff(2, f)
>> 24.0 ( ※
d/dx(2x^3) = 6x^2; x=2 -> 6x^2=24 )
15. 10 進数を n 進数に変換する
nary(数値, 底)
def
nary(num:int, n:int,
list:bool=False)
->
str:
buf,
result = [], ""
while
num >= 1:
buf.append(int(num
% n))
num
/= n
for r
in
buf[::-1]:
result
+= chr((48
if r
< 10 else (55
if r
< 36 else
70)) + r)
return
buf[::-1] if list
else
result
0~9, A~Z, a~zまでの文字を使用し、2進数から61進数まで対応しています。
実行結果:
nary(4, 2)
>> "100"
nary(2000, 16)
>> "7D0"
また、第3引数にTrueを渡すと文字列ではなくリストが返ってくる。
nary(2000, 16, True)
>>[7, 13, 0]