Я бы предложил изменить функцию, которая создает ваше векторное пространство.Начиная с исходной функции:
def create_space(k):
return [''.join(x) for x in itertools.product('01', repeat=k)]
Когда вы вызываете эту функцию, вы полностью перебираете этот диапазон, чтобы построить список, а затем повторяете список снова , чтобы отфильтровать значения.Два подхода к решению этой проблемы:
Если операторы в функции
# Redefine your function to only return values that matter to you
def create_space(k, d, result):
"""
This will filter out your limits, takes result and d as params
"""
vector_space = []
for x in itertools.product('01', repeat=k):
if x[-5:-1]==d and x[-1]!= result:
vector_space.append(x)
return vector_space
# define k, d, and result here
vector_space = create_space(k, d, result)
Генераторный подход
Или ключевое слово yield
будет вычислять значения по одному за раз, поэтому выповторяем только один раз:
def create_space(k):
for x in itertools.product('01', repeat=k):
yield x
vector_space = []
# define d and result here
for x in create_space(k):
if x[-5:-1]==d and x[-1]!= result:
vector_space.append(x)
Следует отметить, что при любом из этих подходов я не редактирую уже установленный объект, пока перебираю его.Вместо этого я включил фильтрацию до того, как пространство было создано, так что вы получите именно то, что вы хотите с первого раза.