2012-03-05 15 views
1

これをpythonicにする方法はありますか?変数と各ループのpythonの組み合わせ

the_list = [1,2,3,4,5] 
for x in the_list 
    y= get_handler(x) 
    #do something with x and y 

基本的に、get_handlerを減速のためのより簡単な方法がありますか?理想的

読めるようなもの:

for x, get_handler(x) in the_list: 
    #do whatever 

作業が、非読めるソリューション:

the_list = [1,2,3,4,5] 
for x, y in [(item, get_handler(item) for item in the_list)]: 
    # do something 
+0

試してみるとどうなりますか? –

+2

IMHO最初の例はより読みやすく、あなたが後で捨てる不要なリストを構築していないので、よりpython的です。 –

+0

それは動作しますが、それを行う簡単な方法があるようです。 – Nix

答えて

2

いいえ、 "pythonic"通常のpythonコードがどのように見えるかを意味します(gnibblerの答えを参照してください:これは "pythonic"と呼ばれます)。

あなたは正確に何をしたい行います何かをしたい場合は、あなたが行うことができます。そして、

def zipMap(func, iterable): 
    for x in iterable: 
     yield x,func(x) 

for x,y in zipMap(get_handler, the_list): 
    ... 

これがすべてであなたに任意の入力は保存されませんのでご注意ください。あなたがをカリー化のためにそれを使用していた場合、それはあなたのタイピングを救う唯一の方法は次のとおりです。

for x,y in withHandler(the_list): 
    ... 

をこのようにそれがあれば合理的であるかもしれない:あなたが入力する手間を省くことを行い

def withHandler(iterable): 
    for x in iterable: 
     yield x,get_handler(x) 

た場合あなたはそれをたくさん使っていました。しかし、それは "ピジョン"とはみなされません。

0

はい、y後、for行の末尾にスペースをコロンを入れ、あなたのインデント用に4つのスペースを使用してください:)

the_list = [1,2,3,4,5] 
for x in the_list: 
    y = get_handler(x) 
    # do something with x and y 
+0

私はあまり風刺的な答えがあまり好きではありませんでした。なぜなら、これまでに私が本当に求められていたものを見たことがないからです。 =) – ninjagecko

関連する問題