Usando bucles while para contar elementos en una lista

places = ["Jack", "John", "Sochi"] count=0 multi_word=0 place = places[count] while place != "Sochi" and count < len(places): if ' ' in place: multi_word += 1 count += 1 place = places[count] print ('Number of cities before Sochi:', count) 

Mi código debe imprimir el número de ciudades antes de Sochi excluyendo Sochi. No entiendo lo que hace esta línea (place = places [count]), ni entiendo por qué la necesito dos veces.

Foreach lo acicalaría

 places = ["Jack", "John", "Sochi"] count = 0 for place in places: if ' ' in place: multi_word += 1 if place == "Sochi": break count += 1 
 count=0 place = places[count] 

Ahora el place es siempre places[0] , es decir, Jack. Por lo tanto, el bucle while solo termina en la segunda condición, dándole la longitud de la lista de 3.

place = places[count] debe ir en el bucle.

Puede usar el siguiente bucle while para verificar el número de lugares antes de Sochi:

 places = ["Jack", "John", "Sochi"] count = 0 multi_word = 0 while count < len(places): place = places[count] if ' ' in place: multi_word += 1 if place == "Sochi": break count += 1 print('Number of cities before Sochi:', count) 

La statement de break significa que saldrá de su bucle while.

¿Por qué no probar una solución más pythonica?

 places = ["Jack", "John", "Sochi"] try: count = places.index("Sochi") except ValueError: count = len(places) multi_word = len([place for place in places[:count] if ' ' in place])