随机排列列表而不重复

时间:2019-06-23 13:32:44

标签: python list

我有一个号码相同的清单。我想随机排列每一行,以使各列​​中没有重复。也许可以一直排列行,直到消除所有重复为止是一种方法,但是应该有更好的方法。

例如,

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 个答案:

答案 0 :(得分:1)

您可以简单地使用随机模块对它们进行洗牌。

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)

答案 1 :(得分:0)

使用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]