2016-03-02 24 views
5

Sadece daha fazla pythonic kodu yazmak istiyorum gibi basit bir soru. Ne anlamıyorum sayımları Listede yürümeye nasıl bir liste anlamaeşzamanlı döngüler ile liste anlama python

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 

aşağıdaki dönüştürmek istiyorum. Ben bir benzeri için iç içe istemiyoruz i şimdi sahip kod çalışıyor ama daha iyi python anlamak ve bunun kullanılması gerektiğini şekilde dili kullanmak istiyorum

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

.

+2

bana görünüyor' – gtlambert

+1

Liste comprehensions değil döngüler yürütülmesi için, listeleri oluşturmak içindir. – zondo

+1

Numaralandırmak istediğim şeydi. Buna liste kavraması dememeliydim, ama hepsi bu öğrenmenin bir parçası. Herkese teşekkürler. – cryptoref

cevap

7

daha pythonic yolu enumerate kullanmaktır: Eğer() `kullanmak numaralandırmak istediğiniz gibi

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

Bu mükemmel ve saymak şimdi mantıklı. Teşekkürler @minitoto. – cryptoref

+0

size bekliyoruz – tinySandy

5

Yapmayın.

Anlamaların anlamları, basit döngülerden daha pythonic değildir; yalnızca bu döngüler yeni listeler (veya dicts, set'ler vb.) Oluşturmak için tasarlanmışsa ve listcomp, döngüden daha kolay okunursa.

Örneğinizde bu durum geçerli değildir (herhangi bir şey oluşturmuyorsunuz), ve yalnızca liste dışı olarak yan etkilerinden dolayı kullanılmamalı, bu da patentsiz bir şekilde yanıltıcı olacaktır.

Yani

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

ama senin Örneğin içine

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

dönüştürmek için iyidir. senin durumunda kullanılacak

+0

Yorumlarınız için teşekkürler Tim, eğlenceli bir python öğrenme geçiren eski bir dinozor ve yolculuk gerçekten çok eğlenceliydi. Ben assembler yazmaya devam ediyorum ve bu her zaman python içinde en iyi yol değil :) – cryptoref