2009-02-23 12 views
9

私はanother postに次の "悪い"スニペットを見ていますが、私が見た唯一の選択肢はPythonのパッチ適用です。'iのxrange(len(x))'の代わりに

for i in xrange(len(something)): 
    workwith = something[i] 
    # do things with workwith... 

この「反パターン」を避けるにはどうすればよいですか?

答えて

22

は、例えばPythonic

for workwith in something: 
    # do things with workwith 
+1

1:時間の80%が、これは何です意味した。値を変更しない場合は –

+0

です。 と何かの仕事を考えてみましょう: workwith + = – vartec

+0

@vartec:それは本当ですが、Alamの質問には答えられません。 – kmkaplan

0

を参照してください:

[workwith(i) for i in something] 
+0

「何か」はオブジェクトの集合です。元のものからは、「何か」は必ず整数ではなく、「仕事」はまったくコレクションではないということはありません。 'workwith'は、 'something'を持つworkignの一時変数のようです。 – hughdbrown

-3

xは何?シーケンスまたはイテレータまたは文字列の場合は、

for i in x: 
    workwith = i 

が問題ありません。

+0

SilentGhostの答えが良いです:-) – Xolve

+0

これは最高の答えであるとは思いません。それはkmkaplanの答えの下位バージョンであるようです。 (それはkmkaplanの前に投稿されたことに気がついていますが、一応明らかに優れたものが提案されれば、答えを削除することは可能です)それでも十分にノックダウンされているので、その他。 – ToolmakerSteve

23

あなたはループ本体内のインデックスを知っておく必要がある場合:

for index, workwith in enumerate(something): 
    print "element", index, "is", workwith 
+1

+1:20%の時間、これがあなたが意味することです。 –

12

があるとして、質問の著者(仮定ごとに)完全に有効です質問へtwoanswersたちを通知しませんでしたインデックスの運命について、有効な回答は次のようになります。

あなたdo not need index全くの場合:

for workwith in something: 
    print "element", workwith 

あなたneed index場合:

for index, workwith in enumerate(something): 
    print "element", index, "is", workwith 

私の答えが適切でない場合は、してください、コメントすることは、私はそれを削除します:)

+1

+1:いいえ、答えは最も適切であり、実際には最も完全です。 – tzot

関連する問題