2011-03-08 30 views
8

¿Hay alguna manera simple de encontrar la última iteración del for Loop en Python? Solo quiero convertir una lista a CSV.Python Última iteración en For Loop

+6

No. ¿Pero tal vez si explicas tu problema real, podemos sugerir una solución alternativa? –

+2

Me pregunto si el módulo csv estándar podría resolver su problema de otra manera. –

+1

No estoy seguro de por qué ninguna de las respuestas a esta pregunta realmente lo responde ... – 2rs2ts

Respuesta

12

Para convertir una lista a CSV, utilice el join -función:

>>> lst = [1,2,3,4] 
>>> ",".join(str(item) for item in lst) 
"1,2,3,4" 

Si la lista ya contiene sólo la secuencia, que acaba de hacer ",".join(l).

+16

esto no escapará correctamente los valores que contienen ',' para eso usa el módulo csv –

4

No es exactamente lo que quiere:

>>> for i in range(5): 
    print(i) 
else: 
    print("Last i is",i) 


0 
1 
2 
3 
4 
Last i is 4 

Editado: Hay csv módulo en la biblioteca estándar, o simplemente ','.join(LIST)

+2

'for' 'else' solo se ejecuta si el ciclo sale al final del iterador no a través de' break' –

+0

No me había encontrado antes con esa construcción. Interesante. – neil

9

realidad cuando un bucle for en Python termina el nombre que se une es todavía accesible y vinculado a su último valor:

for i in range(10): 
    if i == 3: 
     break 
print i # prints 3 

Yo uso este truco con with como:

with Timer() as T: 
    pass # do something 
print T.format() # prints 0.34 seconds 
12

Para convertir una lista a CSV se puede utilizar csv módulo:

import csv 

list_of_lists = ["nf", [1,2]] 

with open('file', 'wb') as f: 
    csv.writer(f).writerows(list_of_lists) 

El archivo 'file' sería:

n,f 
1,2 
10

La mejor solución es probablemente usar el módulo csv, como se sugiere en otros lugares . Sin embargo, para responder a su pregunta como se indica:

Opción 1: contar su camino a través del uso de enumerar()

for i, value in enumerate(my_list): 
    print value, 
    if i < len(my_list)-1: 
     print ", followed by" 

Opción 2: manejar el valor final (my_list[-1]) fuera del bucle

for value in my_list[:-1]: 
    print value, ", followed by" 
print my_list[-1]