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

  • Django 1.9 mit Python 3.4 mit MySQL Unterstützung (Fedora)
  • Wie lade ich eine Datei mit urllib.request in Python 3 herunter?
  • Ungültiges Token bei Verwendung von Oktalnummern
  • Ein Programm, das einzelne Wörter in einem Satz identifiziert, diese in einer Liste speichert und jedes Wort durch die Position dieses Wortes in der Liste ersetzt
  • Wie kann ich das Dateizu werden?
  • Die passende Zeichenfolge enthält x und gefolgt von y
  • Cx-Freeze ausführbare Datei ImportError: Kein Modul namens 'zipfile'
  • Wie schreibe ich eine Funktion, um zu zählen, wie oft ein Zeichen in einer Zeichenfolge auftritt?
  • 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.