Мне приходится обрабатывать огромное количество кортежей, состоящих из 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
Какой самый быстрый способ пропустить кортежи с определенной структурой в продукте иертолу? ⇐ Python
Программы на Python
1737985877
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)
Подробнее здесь: [url]https://stackoverflow.com/questions/79381851/whats-the-fastest-way-of-skipping-tuples-with-a-certain-structure-in-a-itertool[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия