Произвольно переставляя список списка без повторений - PullRequest
0 голосов
/ 23 июня 2019

У меня есть список одинаковых списков номеров. Я хотел бы случайным образом переставить каждую строку, чтобы в столбцах не было повторений. Может быть, продолжать перестановку строк до тех пор, пока не будут устранены все повторения, но путь должен быть лучше.

Например,

input = [
    [1, 2, 3, 4],
    [1, 2, 3, 4],
    [1, 2, 3, 4],
    ]

output = [
    [2, 1, 4, 3],
    [1, 3, 2, 4],
    [4, 2, 3, 1],
    ]

no_good = [
    [1, 3, 2 ,4],
    [3, 1, 4, 2],
    [3, 4, 2, 1]
]

Ответы [ 2 ]

1 голос
/ 23 июня 2019

Вы можете просто перемешать их случайным модулем.

from random import shuffle
input = [
    [1, 2, 3, 4],
    [1, 2, 3, 4],
    [1, 2, 3, 4],
    ]
for x in input:
    shuffle(x)
    print(x)
0 голосов
/ 23 июня 2019

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

import random

inList = [[1, 2, 3, 4],[1, 2, 3, 4],[1, 2, 3, 4]]

def createMatrix(inList,n):
    firstRow = random.sample(inList,4)
    permutes = random.sample(inList,4)
    return list(firstRow[i:]+firstRow[:i] for i in permutes[:n])

outList = createMatrix([1,2,3,4],3)
for elem in outList:
    print(elem)

Один из возможных результатов, приведенных выше, без одинаковых номеров в одном столбце, будет следующим:

[2, 1, 4, 3]
[1, 4, 3, 2]
[4, 3, 2, 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...