Как найти все комбинации python
Перейти к содержимому

Как найти все комбинации python

  • автор:

Как правильно получить все комбинации чисел в Python

Потому что для вашей задачи вам нужно брать не combinations_with_replacement , а product :

import itertools for i in itertools.product('0123456789', repeat=4): print(''.join(i)) 

Комбинации в комбинаторике не учитывают порядка элементов. Поэтому набор тех же элементов будет считаться одной и той же комбинацией, даже если элементы в другом порядке. Ваш код один раз уже напечатал комбинацию из трёх нулей и одной единицы (0001), поэтому он не будет уже печатать другие варианты этой комбинации — 0010, 0100 и 1000. Аналогично и с другими числами.

Как найти все комбинации чисел?

Zoominger

Puki4, решить косноязычно и некорректно сформулированную задачу? Ну каэшн, штаны только подтяну и решу.

Puki4 @Puki4 Автор вопроса

Рональд Макдональд, мне сильно нужно решение, реально. Нужно найти все пары чисел от 1 до 9. Вот так нормально?

Zoominger

Рональд Макдональд @Zoominger Куратор тега Python
Puki4, ну так тупо выведите числа от 10 до 99, сунув между цифрами пробел.
Puki4 @Puki4 Автор вопроса
Рональд Макдональд, чел, ты гений.
Puki4 @Puki4 Автор вопроса

Рональд Макдональд, хотя я не уверен, что такой способ будет работать в других случаях. Если до десяти увеличиваются, и шаг 0.1.

Puki4, откуда теперь какой-то дробный шаг взялся? К изначальной проблеме он никак не подходит. Может стоит написать, что реально нужно сделать, а не какой-то частный пример.

Решения вопроса 1
xmoonlight @xmoonlight
https://sitecoder.blogspot.com

Цикл — только рекурсивный.
Внутри функции (кроме рекурсивного самовызова) — только проверка переключения разряда и вывод на экран.

Ответ написан более трёх лет назад
Нравится 1 6 комментариев
Puki4 @Puki4 Автор вопроса
Не могли бы вы это кодом показать?
xmoonlight @xmoonlight
Puki4, с мобилы пишу — никак. 🙁
Puki4 @Puki4 Автор вопроса
xmoonlight, мне пойдет и обычным сообщением код.
xmoonlight @xmoonlight
Puki4, хорошо, что вы думаете не только о себе..
Puki4 @Puki4 Автор вопроса
xmoonlight, что именно нужно, чтобы проверить переключение разряда?
xmoonlight @xmoonlight

if (N[r]+1>9): N[r]=0 N[r++]=1 . 

Ответы на вопрос 1
В общем виде это перемножение двух последовательностей, т.е. 2 цикла

for a in range(a_start, a_end + 1): for b in range(b_start, b_end + 1): print(a, b)

или использование product.

from itertools import product for a,b in product(range(a_start, a_end + 1), range(b_start, b_end + 1)): print(a,b)

_start, _end соответственно начало и конец соответствующих диапазонов чисел.

Ответ написан более трёх лет назад
Комментировать
Нравится Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

python

  • Python
  • +3 ещё

Почему не работает код telegram для уведомления о новых видео в python?

  • 1 подписчик
  • 56 минут назад
  • 13 просмотров

Получаем все возможные комбинации из n элементов списка

Итак, нам необходимо вывести все вариации n элементов в некотором списке. Будем считать комбинации вида [a, b, c] и [c, b, a] одинаковыми.

С этой задачей справится модуль itertools и его функция combinations:

>>> import itertools >>> digits = [2,5,8,0] >>> list(itertools.combinations(digits, 3)) # получаем возможные комбинации [(2, 5, 8), (2, 5, 0), (2, 8, 0), (5, 8, 0)] >>> len(list(itertools.combinations(digits, 3))) # получаем количество комбинаций 4

Генерация всевозможных комбинаций из набора символов — комбинаторика в Python (itertools)

Встроенный модуль itertools в Python — простой инструментарий, позволяющий генерировать полный список возможных комбинаций из заданного набора символов. Как с этим работать и справляться — далее в статье.

Что ж, в преддверии Нового года KOTOFF.net вновь расправляет крылья.

И сразу к делу. Рассмотрим всего 3 функции и их различия.

1. Нахождение всевозможных комбинаций из набора символов

Допустим, у нас есть некий алфавит из трёх букв (А, Б, В), и из него необходимо составить максимальное количество трёхзначных слов (комбинаций). Причём в данном случае буквы могут повторяться. Алфавит короткий, однако у нас получится составить целых 27 слов. На каждую позицию приходится по 3 варианта букв, соответственно, общее количество комбинаций можно посчитать так: n k (n — количество доступных символов в степени k — длина конечной комбинации) . Для нашего случая: 3 3 = 27

Теперь импортирую itertools и сгенерирую всё то, что выше считали руками, но теперь уже с помощью функции product():

from itertools import product for i in product('АБВ', repeat=3): print(''.join(i), end=' ')

Функция принимает два параметра (набор символов и длина конечного объекта). С помощью join() получили строковое представление полученной комбинации.

И, как можно заметить, в результате мы получили те самые 27 так называемых слов.

Можно добавить в цикл некий фильтр (условие). Например, сделаю так, чтобы комбинируемые слова начинались только с «X» и заканчивались на «YZY»:

Попробуем сгенерировать всевозможные автомобильные номера для одного региона. Способ, конечно, не особо рациональный, но для примера сгодится:

from itertools import product import re chars = '0123456789АВЕКМНОРСТУХ' reg = '[АВЕКМНОРСТУХ]\d[АВЕКМНОРСТУХ]' for i in product(chars, repeat=6): if re.fullmatch(reg, ''.join(i)): print(''.join(i))

Кстати, если добавить в цикл счётчик, то в итоге получим цифру 1.728.000 (12*10*10*10*12*12). Именно столько номеров формата x000xx можно наклепать для одного региона 🙂

2. Перестановка символов в наборе

В отличие от предыдущего примера, теперь мы не можем использовать по несколько раз один и тот же символ. Можем только переставлять их местами. Принцип подсчёта количества комбинаций остаётся тот же: необходимо перемножить количество вариантов символов на каждую позицию слова между собой. Но поскольку по мере составления слова на каждую последующую позицию символов будет оставаться всё меньше и меньше, то и формула также меняется на: n! / (n-k)! (n — количество доступных символов, k — длина слова) . Если n = k, то можно использовать упрощённую формулу: n! (факториал числа n).

В питоне для таких целей используется функция permutations(). Принимает тоже два параметра: набор символов и длину генерируемой комбинации:

from itertools import permutations for i in permutations('АБВ'): print(''.join(i))

Из трёх букв будет сгенерировано 6 различных слов с неповторяющимися символами (1! = 1 * 2 * 3 = 6)

Попробуем составить трёхзначные слова в 5-символьном алфавите (5! / (5-3)! = 120 / 2 = 60):

Кстати, если в заданном «алфавите» есть повторяющиеся символы, то они будут повторяться и в комбинациях:

3. Сочетания без повторений

А если нужно составить не комбинации, а отдельные неповторяющиеся сочетания? Например, есть 6 человек. Вопрос: какими способами их можно разбить по парам? Опять же, пользуемся формулой: n! / (n-k)! / k! (n — количество доступных объектов/символов, k — количество сочетаний) . Соответственно, существует 6! / (6-2)! / 2! = 720 / 24 / 2 = 15 вариантов разбиения этих 6 персон по парам.

Теперь реализуем эту задачу на питоне с помощью функции combinations(). Принимает она два параметра — список и кол-во сочетаний:

from itertools import combinations for i in combinations(['Юля', 'Даша', 'Соня', 'Дима', 'Игорь', 'Вадим'], 2): print(' - '.join(i))

Результат работы программы будет таков:

На этом, пожалуй, на сегодня всё. С наступающим! �� ��

  • 5id15
  • 27.12.2022
  • 14 126
  • 1
  • 99

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *