2016-03-02 7 views
5

単純な質問として、もっとpythonicコードを書いています。私は以下をリストの理解に変換したい並行ループを持つリストの理解

index_row = 0 
for row in stake_year.iterrows(): 
    self.assertTrue(row[0] == counts[index_row][0]) 
    self.assertTrue(row[1][0] == counts[index_row][1]) 
    index_row += 1 

私はカウントリストをどのように歩くのか理解できません。私のようなのために入れ子にしたくない:私は今持っているコードが動作しているが、私はより良いのpythonを理解し、それを使用しなければならないなどの言語を使用したい

[self.assertTrue(x[0] == counts[y][0] for x in stake_year for y in counts] 

+2

が私に見える' – gtlambert

+1

リストの内包表記がないループを実行するために、リストを作成するためのものです。 – zondo

+1

列挙は私が望むものでした。私はこれをリストの理解と呼ぶべきではありませんでしたが、それはすべて学習の一部です。みんな、ありがとう。 – cryptoref

答えて

7

より神託の方法はenumerateを使用することです:あなたは() `を使用列挙したいよう

for index_row, row in enumerate(stake_year.iterrows()): 
    self.assertTrue(row[0] == counts[index_row][0]) 
    self.assertTrue(row[1][0] == counts[index_row][1]) 
+0

これは完璧であり、今列挙するのが理にかなっています。ありがとう@minitoto。 – cryptoref

+0

あなたは大歓迎です – tinySandy

5

しないでください。

リスト内包は、単純に新しいループ(または辞書、セットなど)を構築するように設計されていて、ループよりも読み易い場合にのみ、単純なループよりも深刻です。

これはあなたの例ではありません(何も構築していません)。また、副作用のためだけにlistcompを使用しないでください。

だから、

result = [line.upper() for line in lines] 

ではなく、あなたの例に

result = [] 
for line in lines: 
    result.append(line.upper()) 

を変換するために良いことです。あなたのケースで使用する

+0

コメントありがとうTim、私はPythonを学ぶ楽しみを持っている古い恐竜であり、旅行は本当に楽しいです。私はアセンブラを書くことを続けています、そして、それはいつもパイソンの中で最良の方法ではありません:) – cryptoref

関連する問題