Как выполнить серию перестановок в Python со списком и набором?

извините, кто-то знает, как я могу сделать перестановки в python с определенным списком и определенными числами, я объясняю:

У меня есть список с определенными элементами

lista = [a,b,c,d,e,f]

, тогда у меня есть набор с определенные числа:

set = {3,4,5}

я хочу сделать список перестановок с числами, содержащимися в наборе, чтобы каждый элемент в списке был заменен числами, содержащимися в наборе, следующим образом:

[3,4,3,5,4]
[3,5,3,4,4]
[3,4,4,3,4]
[5,4,5,5,4]
[4,4,5,5,5]
....

и так далее,

Если бы кто-то пытался сделать это, и они могли бы поделиться способом применения алгоритма, я был бы признателен.

Приветствия

-1
задан 23.11.2019, 20:56
1 ответ

Что старательными не являются перестановки, так как в перестановках то, что tendrГ-схвати звук всегда те же 5 элементов (давайте говорить они nГєmeros 3,3,4,4,5), реорганизованных всех возможных форм, но всегда два treses, два cuatros и пять.

Взамен судя по твоему примеру, что ты ищешь, состоит просто в том, чтобы первый элемент списка объелся с числом, которое было должно выбирать между (3,4,5), второй элемент то же самое, третьего равного, и т.д.... AsГ - podrГ-схвати получать например как результат [3, 3, 3, 3, 3], но tambiГ©n [3, 3, 3, 3, 4], и т.д.

у меня не остается ясным, если ты хочешь получить эти элементы "случайным образом" (в котором случае bastarГ - чтобы, с выбирать число случайным образом между (3,4,5) для каждый posiciГіn списка) или действительно ты хочешь все возможные комбинации.

Получать случаи случайным образом

import random
def dame_un_caso(conjunto, n=5):
  lista = []
  for _ in range(n):
    lista.append(random.choice(list(conjunto)))
  return lista

Каждый раз, когда ты призвал к dame_un_caso(conjunto) ты devolverГЎ список 5 элементов, выбранных случайным образом внутри набора. Например:

>>> dame_un_caso({3,4,5})
[3, 5, 4, 4, 5]

Получать все случаи

nГєmero от комбинаций в этом случае не является очень высоким, но в зависимости от tamaГ±o набора и списка sГ - это смоги быть. Если N - tamaГ±o списка и M - tamaГ±o набора, nГєmero комбинаций serГ - в M ** N (так как у тебя есть M возможные выборы для первого элемента и из-за каждой из них другие M для второго, и т.д., с которым в конце концов ты считаешь M*M*M*...*M повторенными N разы).

В твоем случае N=5, M=3 выходит 3 ** 5, которые являются 241 комбинацией.

Если ты хочешь все их, она operaciГіn, в котором ты в действительности нуждаешься, является картезианским продуктом набора (3,4,5) из-за sГ - сам, 5 разами. Этой operaciГіn делает ее тебе itertools.product, asГ-:

from itertools import product
l = list(product({3,4,5}, repeat=5))

, Если ты смотришь len(l) verГЎs 241, что совпадает с ожидаемым. Если ты показываешь элементы l encontrarГЎs (в этом порядке):

[(3, 3, 3, 3, 3),
 (3, 3, 3, 3, 4),
 (3, 3, 3, 3, 5),
 (3, 3, 3, 4, 3),
 (3, 3, 3, 4, 4),
 (3, 3, 3, 4, 5),
 (3, 3, 3, 5, 3),
 (3, 3, 3, 5, 4),
 (3, 3, 3, 5, 5),
 (3, 3, 4, 3, 3),
 (3, 3, 4, 3, 4),
 (3, 3, 4, 3, 5),

... etc
2
ответ дан 01.12.2019, 10:55
  • 1
    Друг ты помог мне с твоим ответом, ты крэк, большое спасибо – Abraham Araujo Moreno 23.11.2019, 23:53
  • 2
    Хороший ответ +1 – Vichoko 24.11.2019, 00:57