2016-03-02 28 views
5

Domanda semplice in quanto voglio solo scrivere più codice pythonic. Voglio convertire il seguente in una lista di comprensioneComprensione delle liste con loop simultanei 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 

Quello che non capisco è come camminare attraverso la lista conta. Non voglio un nidificati Per come:

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

Il codice che ho ora funziona, ma mi piacerebbe capire python meglio e usare il linguaggio come dovrebbe essere utilizzato.

+2

mi sembra che si desidera utilizzare 'enumerare()' – gtlambert

+1

di lista sono per la creazione di liste, non per l'esecuzione di cicli. – zondo

+1

Enumerare era quello che volevo. Non avrei dovuto chiamare la comprensione di una lista, ma è tutto parte dell'apprendimento. Grazie a tutti. – cryptoref

risposta

7

Il modo più divinatorio di utilizzare nel tuo caso è quello di utilizzare 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

Questo è perfetto ed enumerare ora ha senso. Grazie @minitoto. – cryptoref

+0

siete i benvenuti – tinySandy

5

No.

Le comprensibilità delle liste non sono per definizione più pitoniose di semplici loop - solo se questi loop sono progettati per creare nuove liste (o dict, set, ecc.) E se listcomp è più facile da leggere rispetto al ciclo.

Questo non è il caso nel tuo esempio (non stai costruendo nulla), e non dovresti usare un listcomp solo per i suoi effetti collaterali, che sarebbe palesemente unpitonico.

quindi è bene per convertire

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

in

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

ma non il vostro esempio.

+0

Grazie per i commenti Tim, sono un vecchio dinosauro che si sta divertendo imparando Python e il viaggio è stato davvero divertente. Continuo a cercare di scrivere assembler e non è sempre il modo migliore in python :) – cryptoref

Problemi correlati