トップ «前の日記(2007-02-12) 最新 次の日記(2007-02-15)» 編集

AOISAKURA 日記

2003|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|04|05|06|07|08|09|12|
2013|02|03|05|06|08|09|10|11|
2015|11|
2016|12|
2017|03|08|
2018|01|03|06|

pixiv / twitter

※発信する情報は、個人の見解・意見であり、所属する会社の見解・意見ではありません。


2007-02-13 うーん [長年日記]

_ [python] リストの内包表記 その二

2007年2月8日 リストの内包表記へのコメントとして、2007/02/11 リストの内包表記とlambda(ヒビノキロク)で反応を頂いた。

その中でリストの内包表記の有効な使い道として「多変数の組み合わせから条件を満たす解を探索するような場合」として、Scheme:TaxiNumberのラマヌジャンのタクシーナンバーという例を教えていただいた。

というわけで、これをpythonでそのまま書いてみた。(%はコマンド、\は表示の都合での改行)

% python
>>> [(a, b, c, d) for a in range(50) for b in range(a+1, 50) \ 
for c in range(a+1, b) for d in range(c+1, b) if a**3 + b**3 == c**3 + d**3]
[(1, 12, 9, 10), (2, 16, 9, 15), (2, 24, 18, 20), (2, 34, 15, 33),\
(3, 36, 27, 30), (4, 32, 18, 30), (4, 48, 36, 40), (6, 48, 27, 45),\
(9, 34, 16, 33), (10, 27, 19, 24), (12, 40, 31, 33), (17, 39, 26, 36)]

まぁこんだけ長いリストもどうよとは思うけど、内包表記について認識を改められた。ぶっちゃけこんなに柔軟な表現ができるものとは思ってなかったよ。