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

  • 'Is' -Operator verhält sich unerwartet mit Schwimmern
  • Installieren von scipy in Python 3.5 auf 32-Bit-Windows 7-Maschine
  • Logische Indizes in Numpy Wurf Ausnahme
  • Entfernen Sie die neue Zeile "\ n" aus base64 codierten Zeichenfolgen in Python3?
  • Kartenobjekt hat kein len () in Python 3.3
  • Erhalten Sie Webseiteninhalte mit Python?
  • Ich brauche __closure__
  • Warum passt Python 3 exec () bei der Angabe von Einheimischen?
  • 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 ist die beste Programmiersprache der Welt.