2016-12-03 3 views
-1
if match: 
    occur=0 
    for item in tweets: 
     if candidate in item: 
      popular=item[4]+item[5] 
      occur+=popular 
      famous.append(occur) 
return occur 

Ich bekomme nur 10161. Auch für diese Funktion gibt es eine Möglichkeit, ich kann die Liste nach Zahlen sortieren und eine Liste mit Kandidaten nach der sortierten NummerWörterbuch mit Tupelverzeichnis Python

+0

und Welches Ergebnis haben Sie von Ihrer Funktion erwartet oder wollen? – Copperfield

+0

@Copperfield also, wenn das Datum zwischen den beiden Daten ist, im goanna füge einen Code hinzu, der sieht, wer berühmt ist (indem man die letzten zwei Zahlen hinzufügt) und wird eine Liste mit Leuten vom größten bis am wenigsten berühmt ausdrucken – CAVS

+0

... ok, aber das Beantworte meine Frage nicht, was soll diese Funktion tun? eine Liste mit den Personen zurückgeben, die die Bedingung erfüllen? – Copperfield

Antwort

2

die Änderung sind einfach, zuerst müssen Sie eine leere Liste erstellen, wo das Ergebnis behalten wird, dann In der for-Schleife müssen Sie prüfen, ob die Bedingung erfüllt ist, und dieses Element zur Liste hinzufügen, wenn dies der Fall ist, und schließlich diese Liste zurückgeben. Ich wähle auch einige sinnvollen Variablennamen

def famous(data_tweet, lower, higher): 
    result=[] 
    for person, tweets in data_tweet.items(): 
     if all(lower <= tw[2] <= higher for tw in tweets): 
      result.append(person) 
    return result 

dies kann ein wenig mit dem Einsatz von listcomprehension

def famous(data_tweet, lower, higher): 
    return [person for person, tweets in data_tweet.items() if all(lower <= tw[2] <= higher for tw in tweets)] 

reduziert werden (die Ähnlichkeiten feststellen)

in jedem Fall ist das Ergebnis

>>> famous(tweet,1470000000,1480000000) 
['b', 'a'] 
>>> 

Wie Sie nicht zulassen, dass all verwenden, dann sollte es Stil der alten Schule durchgeführt werden, das heißt mit Flagge, die eine Variable ist, die uns sagen, wenn die Bedingung erfüllt ist oder nicht

def famous(data_tweet, lower, higher): 
    result=[] 
    for person, tweets in data_tweet.items(): 
     is_valid = True 
     for tw in tweets: 
      if not (lower <= tw[2] <= higher): 
       is_valid = False 
       break 
     if is_valid: 
      result.append(person) 
    return result 

wir hier Zuerst nehmen wir an, dass die Bedingung erfüllt ist, dann prüfen wir, ob das tatsächlich wahr ist, und wenn nicht, ändern wir unser Flag in false und brechen diese Schleife, da es keinen Grund mehr gibt, mit weiteren Überprüfungen fortzufahren, was im Grunde die all tut für dich. Danach hängen wir die Person entsprechend dem Wert der Flagge an die Liste an oder nicht.

(Wenn Sie auch nicht break werden, erlauben entweder zu nutzen, sorgen Sie sich nicht und es einfach zu entfernen, das würde die Funktion nicht beeinflussen)


über das Zählen Sachen

result=[] 
for person in tweet: 
    count = 0 
    for tw in tweet[person]: 
     count += tw[4] + tw[5] 
    result.append(count) 
+0

copperfield gibt es einen Weg, es zu tun, ohne alle zu verwenden? – CAVS

+0

ja, aber das würde runterkochen, um "alles" umzuschreiben, warum willst du es nicht benutzen? – Copperfield

+0

Ich bin nicht erlaubt, etwas zu verwenden, das ich nicht zuvor gelernt habe – CAVS