Моя цель — подсчитать перестановки последовательности с определенными свойствами. Сначала я генерирую все перестановки, а затем проверяю, удовлетворяются ли свойства. Как я могу улучшить свой код, чтобы иметь возможность перечислять больше перестановок? Насколько большим может быть n? Я добрался до n=11. Могу ли я дойти до 15? до 20?
Следует ли мне рассмотреть возможность использования массивов numpy? Стоит ли мне подумать об использовании генератора? Должен ли я сохранять перестановки в базе данных?
Элементами списка являются целые числа, где список размера n хранит все целые числа от 1 до n.
Изменить: словарь заменен списком, как предложил @Jérôme Richard
from itertools import permutations
def is_valid(seq):
"""check that the sequence satisfies certain properties"""
n = len(seq)
l = [[abs(seq-seq[j]) for i in range(1, k) for j in range(0, k-1)] for k in range(2, n)]
for i in range(0, n-2):
if seq[i+2] not in l:
return False
return True
# enumerate perms
def enumerate_perms(n):
lst = list(range(1,n-1))
perms = [p for perm in permutations(lst) for p in [(n,*perm,n-1)] if is_valid(p)]
return perms
enumerate_perms(3)
# [(3, 1, 2)]
len(enumerate_perms(11))
# 598
Подробнее здесь: https://stackoverflow.com/questions/793 ... properties
Эффективно подсчитывать списки с определенными свойствами ⇐ Python
Программы на Python
-
Anonymous
1737059489
Anonymous
Моя цель — подсчитать перестановки последовательности с определенными свойствами. Сначала я генерирую все перестановки, а затем проверяю, удовлетворяются ли свойства. Как я могу улучшить свой код, чтобы иметь возможность перечислять больше перестановок? Насколько большим может быть n? Я добрался до n=11. Могу ли я дойти до 15? до 20?
Следует ли мне рассмотреть возможность использования массивов numpy? Стоит ли мне подумать об использовании генератора? Должен ли я сохранять перестановки в базе данных?
Элементами списка являются целые числа, где список размера n хранит все целые числа от 1 до n.
[b]Изменить:[/b] словарь заменен списком, как предложил @Jérôme Richard
from itertools import permutations
def is_valid(seq):
"""check that the sequence satisfies certain properties"""
n = len(seq)
l = [[abs(seq[i]-seq[j]) for i in range(1, k) for j in range(0, k-1)] for k in range(2, n)]
for i in range(0, n-2):
if seq[i+2] not in l[i]:
return False
return True
# enumerate perms
def enumerate_perms(n):
lst = list(range(1,n-1))
perms = [p for perm in permutations(lst) for p in [(n,*perm,n-1)] if is_valid(p)]
return perms
enumerate_perms(3)
# [(3, 1, 2)]
len(enumerate_perms(11))
# 598
Подробнее здесь: [url]https://stackoverflow.com/questions/79362776/efficiently-count-lists-with-certain-properties[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия