Wie kann ich diesen Code verkürzen?

CONSTANTS: NDP_INDEX = 0 GREEN_INDEX = 1 LIBERAL_INDEX = 2 CPC_INDEX = 3 

Eine Distanz der Indizes, in denen die Daten jeder Partei in einer 4-Element-Liste erscheinen.

 PARTY_INDICES = [NDP_INDEX, GREEN_INDEX, LIBERAL_INDEX, CPC_INDEX] 

Ein Dict, wo jeder Schlüssel ein Party Name ist und jeder Wert ist der Party-Index.

 NAME_TO_INDEX = {'NDP': NDP_INDEX, 'GREEN': GREEN_INDEX,'LIBERAL': LIBERAL_INDEX,'CPC': CPC_INDEX} 

Ein Dict, wo jeder Schlüssel ist ein Partei-Index und jeder Wert ist der Name der Partei.

 INDEX_TO_NAME = {NDP_INDEX: 'NDP',GREEN_INDEX: 'GREEN', LIBERAL_INDEX: 'LIBERAL',CPC_INDEX: 'CPC'} def voting_range(range_votes): ''' (list of list of int) -> tuple of (str, list of int) #range_votes is a list of integers of range ballots for a single #riding; the order of the inner list elements corresponds to the order #of the parties in PARTY_INDICES.Based on range_votes, return a tuple #where the first element is the name of the party winning the seat and #the second is a list with the total range_votes for each party in the #order specified in PARTY_INDICES. >>> voting_range([[5, 4, 1, 4], [3, 2, 2, 5], [3, 3, 1, 4,]]) ('CPC', [11, 9, 4, 13]) ''' NDP_count = 0 GREEN_count = 0 LIBERAL_count = 0 for sub_list in range_votes: NDP_count += sub_list[0] GREEN_count += sub_list[1] LIBERAL_count += sub_list[2] CPC_count += sub_list[3] PARTY_INDICES[0] = NDP_count PARTY_INDICES[1] = GREEN_count PARTY_INDICES[2] = LIBERAL_count PARTY_INDICES[3] = CPC_count winner = max(NDP_count, GREEN_count, LIBERAL_count, CPC_count) if winner == NDP_count: return 'NDP', PARTY_INDICES elif winner == GREEN_count: return 'GREEN', PARTY_INDICES elif winner == LIBERAL_count: return 'LIBERAL', PARTY_INDICES elif winner == CPC_count: return 'CPC', PARTY_INDICES 

Ich bin mir nicht sicher, wie man das auch mit der Helferfunktion verkürzt, weil wir nicht erlauben, neue Konstanten (universelle Variablen) zu erstellen, sondern nur lokale Variablen

2 Solutions collect form web for “Wie kann ich diesen Code verkürzen?”

Versuche dies:

 for sub_list in range_votes: for i in range(4): PARTY_INDICES[i] += sub_list[i] return ( {PARTY_INDICES[0] : 'NDP', PARTY_INDICES[1] : 'GREEN', ...}[max(PARTY_INDICES)], PARTY_INDICES ) 

Das ist so kurz wie ich bereit bin, es zu machen 😉

Sie brauchen nicht alle diese Dicts und Range Variablen und definieren / enum suchen Dinge. Das ist ein wenig weniger C und ein wenig mehr Python:

 votes=[[5, 4, 1, 4], [3, 2, 2, 5], [3, 3, 1, 4,]] parties=['NDP','GREEN','LIBERAL','CPC'] def voting_range(v): totals = [sum(x) for x in zip(*v)] # transpose row/col of list of lists pname = parties[totals.index(max(totals))] return (pname,totals) >>> voting_range(votes) ('CPC',[11, 9, 4, 13]) 

Hier sind ein paar magische Python-Sachen. *v entpackt die Liste der Listen und speichert sie als separate Argumente zu zip , die ein iterable zurückgibt, das das erste Element jedes Arguments in einer Liste gibt, dann das zweite Element jedes Arguments in einer Liste und so weiter. Dies hat die Wirkung der Umsetzung der Matrix (Swapping Zeilen und Spalten). In dieser Form, einfach summieren jede Liste wird die Stimme Summen. Die for x in Syntax eingewickelt in Klammern ist ein Listenverständnis , eine weitere awesome Python-Funktion, die effizient erstellt Listen von iterables. Schließlich ist index eine Listenmethode , die den Index des ersten Elements zurückgibt, das den angegebenen Wert hat, der in diesem Fall die max. Da die Elemente von v die gleiche Länge haben wie die Anzahl der Parteien, wird dies auch als Index in die Parteienliste dienen.

  • Python 3 map / lambda methode mit 2 eingängen
  • Erstellen einer Liste Unterklasse hashable
  • Wie läuft ich verdreht aus der Konsole?
  • Wie bekomme ich die erste datetime eines Tages?
  • Zeitkomplexität des Python-String-Indexzugriffs?
  • Um eine Schaltfläche zu erstellen, wenn gedrückt wird, drücken Sie die Nummer auf dieser Schaltfläche im Eingabefeld in python 3.3
  • Wie konvertiere ich Python 3 in Python 2 Code?
  • Was sind die Alternativen zu "python3 sample_program.py &" via ssh?
  • Word_tokenize TypeError: erwarteter String oder Puffer
  • Unendliche Rekursion in python3.3 Setter
  • Python: ist es möglich zu verlangen, dass Argumente für die Funktionen alle Schlüsselwörter sind?
  • Python ist die beste Programmiersprache der Welt.