2014-05-09 7 views
6

ich Python bin sehr neu und nach einer Möglichkeit, die folgende zu vereinfachen:Python - wiederholt vereinfachen, wenn Aussagen

if atotal == ainitial: 
    print: "The population of A has not changed" 
if btotal == binitial: 
    print: "The population of B has not changed" 
if ctotal == cinitial: 
    print: "The population of C has not changed" 
if dtotal == dinitial: 
    print: "The population of D has not changed" 

Offensichtlich _total und _initial sind vordefiniert. Vielen Dank im Voraus für jede Hilfe.

+0

Hallo! Ein kleiner Punkt; Vergiss deine Doppelpunkte nicht am Ende von 'if' Statements. Gute Sache, um schnell verinnerlicht zu werden. – FarmerGedden

Antwort

6

können Sie zwei Wörterbücher verwenden:

totals = {'A' : 0, 'B' : 0, 'C' : 0, 'D' : 0} 
initials = {'A' : 0, 'B' : 0, 'C' : 0, 'D' : 0} 
for k in initials: 
    if initials[k] == totals[k]: 
     print "The population of {} has not changed".format(k) 

Eine ähnliche Art und Weise zunächst nicht verändert Populationen ist die Bestimmung:

not_changed = [ k for k in initials if initials[k] == totals[k] ] 
for k in not_changed: 
    print "The population of {} has not changed".format(k) 

Oder können Sie eine einzelne Struktur haben:

info = {'A' : [0, 0], 'B' : [0, 0], 'C' : [0, 0], 'D' : [0, 0]} 
for k, (total, initial) in info.items(): 
    if total == initial: 
     print "The population of {} has not changed".format(k) 
+2

Ich würde ein Wörterbuch von Paaren bevorzugen. Oder wenn die Daten interessanter sind, eine benutzerdefinierte Klasse und ein Wörterbuch solcher Objekte. – rodrigo

+0

Tatsächlich würde es Ihnen mit einer Liste von 3-Tupeln erlauben, die Dictionary-Lookups in 'not_changed' zu vermeiden, d. H.' Not_changed = (Name für Name, initial, total if initial == total) '. –

+0

@rodrigo Können Sie mir bitte in Bezug auf mein Beispiel oben zeigen. – user3619552

1

Sie können alle Paare in einem Wörterbuch organisieren und alle Elemente durchlaufen:

populations = { 'a':[10,80], 'b':[10,56], 'c':[90,90] } 

    for i in populations: 
     if populations[i][1] == populations[i][0]: 
      print(i + '\'s population has not changed') 
0

Ein anderer Weg (2,7) unter Verwendung eines geordneten Wörterbuch:

from collections import OrderedDict 

a = OrderedDict((var_name,eval(var_name)) 
       for var_name in sorted(['atotal','ainitial','btotal','binitial'])) 
while True: 
    try: 
     init_value = a.popitem(last=False) 
     total_value = a.popitem(last=False) 
     if init_value[1] == total_value[1]: 
      print ("The population of {0} has " 
        "not changed".format(init_value[0][0].upper())) 
    except: 
     break