Pythonテクニックのまとめ

3413 ワード

引用する
Python言語は強大で柔軟で、他の言語(C/C++、Javaなど)で複雑な操作が多いようですが、Pythonは往々にして不意を突いて、見ているうちに簡潔さに驚嘆します!(絶えず補充中、皆さんの補充を歓迎します^^)
テクニック1:行列の行列変換
マトリックスを行列変換し、Pythonコードは1行だけ!ネストされたリスト導出式(List Comprehensions)とzipを用いてmatrixを展開する2つの方法を見る.
>>> matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> matrix
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> transed = [[row[i] for row in matrix] for i in range(4)]
>>> transed
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
>>> 

 
>>> matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> matrix
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
>>> transed = zip(*matrix)
>>> transed
[(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]

注:2つ目の方法では、要素がリストからメタグループに変わります.
テクニック2:展開パラメータリストを使用して関数パラメータを渡す
1つのタプルまたはリスト(List)、さらにはディクショナリ(Dictionary)を定義することで、変数を展開することによって、次のように関数に複数のパラメータを渡すことができます.
>>> def f(x, y, z):
	print("x=%s"%(str(x)))
	print("y=%s"%(str(y)))
	print("z=%s"%(str(z)))

	
>>> args = (10, "test", [100, 200])
>>> f(*args)
x=10
y=test
z=[100, 200]
>>> 

テクニック3:enumerate関数を利用して辞書を構築する健
リスト[「num 0」,「num 1」,「num 2」]から{0:「num 0」,1:「num 1」,2:「num 2」}のような形式の辞書を構築する必要がある場合があります.enumerate埋め込み関数を使用して以下に示すことができます.
>>> d = {k : v for k, v in enumerate(["num1", "num2", "num3"])}
>>> d
{0: 'num1', 1: 'num2', 2: 'num3'}
>>> 

テクニック4:zip関数を用いて複数のシーケンスを同時に巡回する
複数のシーケンスタイプ(str,list,tuple,unicode,bytes,buffer,xrangeなど)を同時に巡回操作する必要がある場合は、zip埋め込み関数を使用して、以下に示すようにします.
>>> name = ["Guido", "Eric", "Thomas"]
>>> age = [45, 34, 31]
>>> city = ["New York", "Seattle", "Beijing"]
>>> for n, a, c in zip(name, age, city):
	print("%s is %d old, working at %s."%(n, a, c))

	
Guido is 45 old, working at New York.
Eric is 34 old, working at Seattle.
Thomas is 31 old, working at Beijing.
>>> 

テクニック5:スライス(slice)でシーケンスを反転
str、list、tupleなどのシーケンスタイプでは、スライスを使用してシーケンス値を反転できます.以下に示します.
>>> S = "abcdefg"
>>> S
'abcdefg'
>>> S[::-1]
'gfedcba'
>>> L = ["a", "b", "c", "d"]
>>> L
['a', 'b', 'c', 'd']
>>> L[::-1]
['d', 'c', 'b', 'a']
>>> T = (1, 2, 3, 4,5)
>>> T
(1, 2, 3, 4, 5)
>>> T[::-1]
(5, 4, 3, 2, 1)
>>> 

テクニック6:evalを使用して文字列形式のタイプを内部タイプに変換する
「[4,[5,6]」,「{'name':'thomas','age':32}」のような文字列形式のリスト,辞書形式では,evalによりPythonのlistおよびdictタイプに変換できる.このシーンは主にユーザ入力やファイルからの読み取りに用いられる.次のようになります.
>>> strList = "[4, [5, 6]]"
>>> strDict = "{'name': 'thomas', 'age': 32}"
>>> eval(strList)
[4, [5, 6]]
>>> eval(strDict)
{'age': 32, 'name': 'thomas'}
>>>
もちろん、evalは強力で、文字列とPython内部のデータ型間の変換を処理するには、evalとstrを組み合わせて使用すると効果的です.