2016-04-19 7 views

Antwort

1

Weder ist "effizienter", ohne Kontext.

Die verschachtelten Schleifen funktionieren auf jeder Liste von Städten, egal wie groß sie sind, vorausgesetzt, Sie haben es geschafft, sie zu erstellen. Es hat den zusätzlichen Aufwand, eine äußere Schleife auszuführen, die die innere Schleife wiederholt initialisiert.

Die zweite vermeidet das, aber muss eine zweite Kopie aller Daten ''.join(cities) erstellen, um durchzulaufen. Wenn Ihre Liste von Städten groß genug oder Ihre Umgebung kurz genug im Speicher ist, wird es fehlschlagen, wo der erste Erfolg haben würde. Außerdem erzeugt es mehr Müll, der wiederhergestellt werden muss.

Mit ziemlicher Sicherheit werden beide die Arbeit schnell genug erledigen, es sei denn, Sie entwickeln für ein emanzipiertes Embedded-System mit sehr begrenztem RAM. Im Allgemeinen sollte bei modernen PC-Systemen mit GHz-CPUs und Gbytes RAM die Effizienz nicht die erste Überlegung sein. Eine Ausnahme besteht darin, dass Sie vorhersagen können, dass die Menge an Daten, die Sie im RAM zusammenstellen müssen, die verfügbare RAM-Menge übersteigt. In diesem Fall lohnt es sich, vollständige Zwischenkopien zu vermeiden. Die andere ist, wo Sie Algorithmen unterschiedlicher Reihenfolge haben und nicht absolut garantieren können, dass die Menge der Daten immer klein bleiben wird. In diesem Fall bevorzugen Sie einen Algorithmus niedrigerer Ordnung. O (N) übertrumpft O (N^2) in einem großen Ausmaß, wenn N groß wird!

4

"was wäre effizienter," hängt oft von OS und anderen Faktoren. Sie können jedoch ein wirklich einfaches Benchmark tun:

cities = ['Berlin','London','Chicago'] 
import time 

start = time.time() 
for x in range(100000): 
    for c in cities: 
     for l in c: 
      pass 
end = time.time() 
print "method 1: " + str(end-start) 

start = time.time()   
for x in range(100000):  
    for l in ''.join(cities): 
     pass 
end = time.time() 
print "method 1: " + str(end-start) 

Auf Windows 8 mit Python 2.7 Ich habe:

method 1: 0.218999862671 
method 1: 0.141000032425 

ich die meisten Systeme glaube ähnliche Ergebnisse haben werden.

Wie auch immer, Sound zu mir, wie Sie in nutzlose vorzeitige Optimierungen geraten. Sind Sie sicher, dass Sie diese Effizienz wirklich brauchen?

1

Hier ist eine dritte Option, die Sie (die Geschwindigkeit auf Ihren Anwendungsfall abhängen) testen sollten:

print '\n'.join(''.join(cities)) 

weil jeder Aufruf Druck ziemlich viel Overhead hat, so ist es oft gut verwenden so wenig wie möglich (eins in diesem Fall).

Verwandte Themen