C言語ならよく分かるが、Python Version 3 をはじめて勉強するひとのために、まとめておく。

自分はまさにそのひとりだからだ。

<演算子>
余り切り捨て除算: // 
  C言語でいう整数同士の除算「/」。
  実数同士の除算にも使える。 3.5//2.1 → 1.0 -3.5//2.1 → -2.0
  しかし、負数の除算ではC言語と違う計算結果によるので、要注意!!! 以下は一例。
   (Python3) -5//2 → -3
   (C言語) -5/2 → -2

べき乗: **
  C言語ではサポートされず。
  多倍長整数はPython 3ではサポートされているので、3**1000 とか平気で書ける。
  平方根なら 2**0.5。C言語のpow()関数は基本的に不要。

インクリメント演算子、デクリメント演算子はない:
  C言語の ++, — 演算子はPythonにない。i+=1, i-=1 で代用。

<データ型>
文字列 (str): a, b, c = ”, “”, str()
リスト (list): a, b = [], list()
タプル (tuple): a, b = (), tuple()
辞書 (dict): a, b = {}, dict()
複素数(complex): a, b = 2+1j, complex(2,1)
  上の5例では、変数 a, b, c はどちらも同じデータ型になる。
  文字列はシングルクォーテーション「’」で囲んでも、ダブルクォーテーション「”」で囲んでも全く同じ。

C言語でいう2次元配列のようなもの:
  arr = [[0 for c in range(200)] for r in range(100)]
  arr[99][199] = 1
  Python 3 では以上のようにリストのリストで代用する。
  グラフの連結関係を表現するのに必要な空の2次元配列は to = [[] for i in range(MAX)] で宣言する。

リストに対するソート:
  競プロではユニークな解答出力を得るために、ソート操作が欠かせない。Python3では、以下のようなコートが使える。ただし、相手が数値か文字列かによって、ソート結果が変わるので、データ型に気をつけること。たとえば、文字列”9″と”10″では、昇順が”10″, “9”になるが、数値9と10では、昇順が当然9,10になる。

tbl = [[Japan,0,5],[Egypt,1,3],[Canada,2,1],[Spain,3,7]]
for i in sorted(tbl, key=lambda x:(-x[2],x[1])): print(i[0], ',', i[2], sep='')

表示結果:

Spain,7
Japan,5
Egypt,3
Canada,1

ソートの基準:チーム名と成績を入力し、成績の良い順(勝ち点の多い順)に並べ替える。勝ち点が同点の場合は入力順に出力すること。

<リストの内包表現>
リストを簡潔に、しかも高速に生成する手法のひとつに、内包表現を利用するというものがある。Pythonに慣れないひとにはわかりにくいが。

1. for 文による内包

 a = [i for i in range(1,10)]

1から9までの連続した数値のリストが生成される。

2. for と if との組み合わせによる内包
for 繰り返しのなか、特定の要素をピックアップする。

 a = [i for i in range(10) if i & 1]

0から9までの連続した数値のうち、奇数だけを抽出してリストをつくる。

3. for と if-else との組み合わせ

 a = [i**2 if i & 1 else i**3 for i in range(10)]

0から9までの連続した数値のうち、奇数は自乗、偶数は3乗のリストをつくる(つまり、[0, 1, 8, 9, 64, 25, 216, 49, 512, 81] がつくられる)。
☆ if-else は for のまえに書かないといけないことに留意

4. 上記の if-else と for との間にネスト的に if-else を入れることができる。自己誇示、自己満足に使えそう!

print(*["fizzbuzz" if i%15==0 else "fizz" if i%3==0 else "buzz" \
if i%5==0 else i for i in range(1,2**100)], sep='\n')

C/C++プログラマは驚くしかない。

<その他>
複数変数の同時代入(初期化): a,b,c,d = 1,2,3,4
  行数節約のために、変数の初期化は上記の形で書ける。

変数同士のswap操作: a,b = b,a
  わかりやすくて便利。

<小数点の四捨五入>
以下の例は、実数 ans を小数点2桁に正確に四捨五入する。

from decimal import Decimal, ROUND_HALF_UP
ans = 9876543210.123456
print(Decimal(str(ans).quantize(Decimal('0.01'), rounding=ROUND_HALF_UP))

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Post Navigation