有几种方法可以做到这一点。一种是使用嵌套list comprehensions(以及一些指数算术):
permutation = [[0, 4, 8, 12], [1, 5, 9, 13], [2, 6, 10, 14], [3, 7, 11, 15]]
def permute(bits):
return [[bits[i/4][i%4] for i in chunk] for chunk in permutation]
这将通过建立位逐块地,你的位输出块,根据置换给定的索引获取正确的值。 input[i/4][i%4]
确实查找,i/4
其中(在Python 3:i//4
代替,因为我们需要整数除法)选择正确的输入块和i%4
选择从该输入块右边项(%
是在python的modulo操作者)。
让我们来看看它是否有效,而不是只与位,太:
>>> permute([[0, 1, 0, 0],[0, 1, 0, 1],[1, 1, 0, 1],[0, 0, 0, 1]]) % your example
[[0, 0, 1, 0], [1, 1, 1, 0], [0, 0, 0, 0], [0, 1, 1, 1]]
>>> permute([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15]])
[[0, 4, 8, 12], [1, 5, 9, 13], [2, 6, 10, 14], [3, 7, 11, 15]]
>>> permute([[0, 2, 4, 6], [8, 10, 12, 14], [16, 18, 20, 22], [24, 26, 28, 30]])
[[0, 8, 16, 24], [2, 10, 18, 26], [4, 12, 20, 28], [6, 14, 22, 30]]
等都不是代码写作服务。你有没有试图自己做这个? – martineau