2017-02-07 9 views
0

У меня есть функция, чей ввод является вектором, и я хочу сохранить все векторы, которые передают функцию и имеют определенный вывод (True или False).Python 3.5: Как объявить пустой набор векторов?

У меня возникли проблемы с определением, где хранить все векторы.

Редактировать: Я имел в виду массив, извините, я немного нуб.

моя функция

def true_set(u=[i,j,k,h,n]) 

Затем он вычисляет что-то на основе элементов и возвращает истину или ложь. Функция представляет собой выражение, использующее переменные i, j, k, h, n.

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

def generate_set(): for i in [0,1,100]: 
    for j in [0,1,100]: 
     for k in [0,1,100]: 
      for h in [1,10,10]: 
       for n in [0.5,10,10]: 
        u=[i,j,k,h,n] 
        if true_set(u)==True: 
+1

Просьба указать код. Python не имеет встроенного векторного типа. –

+0

Вы имеете в виду 'list', правильно? Или, в общем, изменчивая коллекция? Если это так, 'set' не будет делать, поскольку вы не можете хранить в нем изменяемые объекты. Используйте «вектор» «векторов». –

+0

@ JimFasarakis-Hilliard, если бы я сделал это, тогда мне не нужно было бы указать элемент, в котором хранится вектор? Это проблема для меня. – Antecedent

ответ

0

Вы в основном делают две общие операции

  1. Построение ряда комбинаций на основе на множестве итераций.
  2. Фильтрация этих комбинаций на основе теста правдоподобия.

У Python есть инструменты для обеих этих вещей.

В библиотеке itertools имеется большое количество утилит для создания комбинаций вещей.

i_list = [0, 1, 100] 
j_list = [0, 1, 100] 
h_list = [1, 10, 10] 
n_list = [.5, 10, 10] 

from itertools import product 
vectors = [v for v in product(i_list, j_list, h_list, n_list)] 

Вы можете также фильтровать от функции

vectors = [v for v in product(i_list, j_list, h_list, n_list) if true_test(v)] 

Или более функционально

vectors = filter(true_test, product(i_list, j_list, h_list, n_list)) 

В этом случае true_test будет выглядеть как

def true_test(vector): 
    if vector[0] > 1: 
     return True 
    return False 

Или wh на других других тестах, которые вы используете, чтобы решить, включать ли данный вектор или нет.