неверная синтаксическая ошибка при использовании цикла for для объекта zip - PullRequest
0 голосов
/ 06 ноября 2019

Я изучаю, как оптимизировать циклы в Python 3.7, и продолжаю получать «неверную синтаксическую ошибку». Я уже проверил пропущенные скобки. Вот код:

    best = probabilities[0]
    best = (probabilities[i] for i in range(1, len(probabilities)) if probabilities[i] > best)
    print(best)
    prob, im = (prob, im for prob, im in zip(probabilities, image_names) if prob == best)

    return (prob, im)

дает мне ошибку

  File "path", line 27
    prob, im = (prob, im for prob, im in zip(probabilities, image_names) if prob == best)
                           ^
SyntaxError: invalid syntax

Я не уверен, что пошло не так, поскольку следующий код, который я использовал в другом упражнении, использует почти такой же синтаксис:

im = [im for im, prob in zip(image_names, probabilities) if prob >= threshold]
    return (im)

Редактировать: я также пытался

return (prob, im for prob, im in zip(probabilities, image_names) if prob == best)

, и он говорит, что тип переменной является Генератором [tuple [float, str], Any, None], но яЯ не уверен, что это значит.

Любая помощь будет очень признателен

Ответы [ 2 ]

2 голосов
/ 06 ноября 2019

Кортежи должны быть явно заключены в () при создании выражением понимания / генератора:

((prob, im) for prob, im in zip(probabilities, image_names) if prob == best) 
1 голос
/ 06 ноября 2019

Вы делаете это намного сложнее, чем необходимо.

Просто установите обе переменные в течение одного цикла

best = probabilities[0]
best_image = image_names[0]
for index, prob in enumerate(probabilities):
    if prob > best:
        best = prob
        best_image = image_names[index];
...