我有一个号码相同的清单。我想随机排列每一行,以使各列中没有重复。也许可以一直排列行,直到消除所有重复为止是一种方法,但是应该有更好的方法。
例如,
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]
]
答案 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]