Python - использование строки в качестве выражения (exec и eval не работают) - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь использовать scipy.stats.f_oneway() для выполнения ANOVA.Он принимает array_like в качестве ввода, что бы это ни значило.

numpy: формальное определение объектов типа «массив»?

В любом случае, это работает, когда я вручную набираюданные для сравнения.Например, это работает: Входные данные:

list1 = [3,4,5,6]
list2 = [4,5,6,7]
list3 = [5,6,7,8]
sp.stats.f_oneway(list1, list2, list3)

Выходные данные:

F_onewayResult(statistic=2.3999, pvalue=0.1461)

Однако я хочу сравнить множество различных списков, и я хотел бы сравнить их динамически в моем коде.

Это то, что я хочу:

list1 = [3,4,5,6]
list2 = [4,5,6,7]
list3 = [5,6,7,8]
listOfLists = [list1, list2, list3]
sp.stats.f_oneway(listOfLists)

Однако, f_oneway не нравится этот формат ввода.Поэтому я подумал, может быть, я мог бы использовать цикл для создания строки, а затем распаковать ее для использования в качестве аргумента, например:

list1 = [3,4,5,6]
list2 = [4,5,6,7]
list3 = [5,6,7,8]
listString = 'list1, list2, list3'
sp.stats.f_oneway(eval(listString))

Однако это не работает.Это заставляет меня поверить, что эта функция требует ввода, например:

sp.stats.f_oneway(list1, list2, list3)

Как я могу использовать строку для ввода ввода, требуемого функцией f_oneway?

1 Ответ

0 голосов
/ 16 октября 2018

вы можете сделать это:

sp.stats.f_oneway(*listOflists)

Это развернет список и добавит 3 отдельных аргумента

...