2016-12-03 5 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 

Я получаю только 10161. Кроме того, для этой функции существует способ сортировки списка по номерам и возврата списка с кандидатами по отсортированному номеруСловарь со списком кортежей Python

+0

и какой результат вы ожидали или хотите от своей функции? – Copperfield

+0

@Copperfield поэтому, если дата находится между двумя датами, im goanna добавляет код, который видит, кто знаменит (добавив последние два номера), и распечатает список с людьми от самых больших до наименее известных – CAVS

+0

... нормально, но это не отвечайте на мой вопрос, что должна делать эта функция? вернуть список с лицами, которые выполняют условие? – Copperfield

ответ

2

модификация проста: сначала вам нужно создать пустой список, в котором будет сохранен результат, затем в цикле for вам нужно проверить, выполнено ли условие, и добавить этот элемент в список, если он это сделал, и, наконец, вернуть этот список. Я также выбрать несколько более значимых переменных имена

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 

это может быть уменьшена немного с использованием 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)] 

(обратите внимание на сходство)

в любом случае результат

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

Как не позволяют использовать all, то это должно быть сделано старой школы стиль, который использует флаг, который является переменной, которая покажет нам, если условие выполнено или не

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 

здесь сначала предположим, что условие выполнено, тогда мы проверяем, что это действительно так, и если мы не изменяем наш флаг на false и не прерываем этот цикл, поскольку больше нет причин продолжать дальнейшие проверки, что в основном является то, что all do для тебя. Впоследствии, согласно значению флага, мы добавляем его в список или нет.

(Если вы не позволяют использовать break либо, не волнуйтесь и просто удалить его, что не влияет на функцию)


о подсчете вещи

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

Медное поле есть способ сделать это, не используя все? – CAVS

+0

да, но это будет сводиться к переписыванию 'all', почему вы не хотите его использовать? – Copperfield

+0

Мне не разрешено использовать что-то, чего я не узнал до – CAVS

Смежные вопросы