2015-08-19 4 views
0

У меня возникли проблемы со списком понимания в PythonPython Список Постижение Установка локальных переменных

В принципе у меня есть код, который выглядит, как этот

output = [] 
for i, num in enumerate(test): 
    loss_ = do something 
    test_ = do something else 
    output.append(sum(loss_*test_)/float(sum(loss_))) 

Как я могу написать это, используя список понимание таких как:

[sum(loss_*test_)/float(sum(loss_))) for i, num in enumerate(test)] 

однако я не знаю, как присвоить значения из loss_ и test_

+0

Вы пытались это сделать вообще? Что случилось? Где код, на котором вы на самом деле * «столкнулись с проблемой» *, и что конкретно вы подразумеваете под бедой? Помогло бы [mcve]. – jonrsharpe

+0

Почему? Что случилось с циклом for, который у вас есть сейчас? –

+0

В Python 2 вместо выполнения 'c = a/float (b)', выполните 'from __future__ import division; c = a/b', см. [этот PEP] (https://www.python.org/dev/peps/pep-0238/). Это значение по умолчанию в Python 3. –

ответ

2

Вы можете использовать вложенную список понимание, чтобы определить эти значения:

output = [sum(loss_*test_)/float(sum(loss_)) 
      for loss_, test_ in ((do something, do something else) 
           for i, num in enumerate(test))] 

Конечно, независимо от того, что любой более читаемым другой вопрос.

1

Как упоминалось в комментариях к Ярославу, в списках вы не можете сохранить значение в переменной напрямую.

Однако он позволяет использовать функции.

Я применил пример basic (поскольку образец, который вы предоставили, является неполным для тестирования), но он должен показать, как вы все еще можете выполнять код в понимании списка.

def loss(): 
    print "loss" 
    return 1 

def test(): 
    print "test" 
    return 5 

output = [loss()*test() for i in range(10) ] 
print output 

что этот случай приведет к списку [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]

Я надеюсь, что это как-то показывает, как вы могли бы в конечном итоге с поведением, что вы искали.

+0

Я думаю, что вопрос заключается не столько в том, как выполнять сложные вещи в понимании списка, сколько в том, как рассчитать временную переменную один раз и использовать ее в двух местах, как это делает OP с 'loss_'. –

+0

@tobias_k объяснил это лучше, чем я мог сам объяснить – qwertylpc