Какой самый быстрый способ пропустить кортежи с определенной структурой в продукте иертолу?Python

Программы на Python
Ответить
Anonymous
 Какой самый быстрый способ пропустить кортежи с определенной структурой в продукте иертолу?

Сообщение Anonymous »

Мне приходится обрабатывать огромное количество кортежей, состоящих из k целых чисел, каждый из которых находится в диапазоне от 1 до Max_k.
Каждый Max может быть разным.
Мне нужно пропустить кортежи, в которых элемент достиг максимального значения, в этом случае сохраняется только кортеж с «1» в оставшейся позиции.
Максимальное значение предусмотрено замыслом, поэтому не может быть, чтобы какой-либо элемент > его максимального значенияНапример, если макс. второго элемента тройки равно 4, мне нужно сохранить (1,4,1), но пропустить
(1,4,2) , (1,4,3) ... (2,4, 1) и т. д.
Я почти уверен, что мне не хватает гораздо более быстрого способа сделать это.
Мой типичный сценарий — кортежи с 16–20 элементами с максимальными значениями в 50. -70 баллов.
Что бы было рекомендуемый подход?
В Python в качестве игрушечного примера с жестко запрограммированными значениями Max (5,4,2) выглядит следующее:
from itertools import *

def filter_logic(y):
if y[0]==5:
if y[1] > 1 or y[2] >1:
return True
if y[1]==4:
if y[0] > 1 or y[2] >1:
return True
if y[2]==2:
if y[0] > 1 or y[1] >1:
return True
return False

def tuples_all(max_list):
my_iterables = []
for limit in max_list:
my_iterables.append(range(1, limit+1))
return product(*my_iterables)

def tuples_filtered(max_list):
return filterfalse(filter_logic, tuples_all(max_list))

max_list = [5,4,2]

print("Original list")
for res in tuples_all(max_list):
print(res)

print("After filtering")
for fil in tuples_filtered(max_list):
print(fil)

Вывод отфильтрованных кортежей:
After filtering
(1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3, 1)
(1, 4, 1)
(2, 1, 1)
(2, 2, 1)
(2, 3, 1)
(3, 1, 1)
(3, 2, 1)
(3, 3, 1)
(4, 1, 1)
(4, 2, 1)
(4, 3, 1)
(5, 1, 1)


Подробнее здесь: https://stackoverflow.com/questions/793 ... a-itertool
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»