我想要所有可能的单个右移阵列:
def gen(total):
rot = []
init = [0]*total
init[0] = 1
print init
rot.append(init)
for i in range(total-1):
init[i] = init[i] - init[i+1]
init[i+1] = init[i] + init[i+1]
init[i] = init[i+1] - init[i]
print init
rot.append(init)
return rot
rot = gen(8)
print rot
Run Code Online (Sandbox Code Playgroud)
这打印
[1, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 0, 0, 0, 0, 0, 0]
[0, 0, 1, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0]
[0, 0, 0, 0, 1, 0, 0, 0]
[0, 0, 0, 0, 0, 1, 0, 0]
[0, 0, 0, 0, 0, 0, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 1]
Run Code Online (Sandbox Code Playgroud)
我希望这是列表的列表.我初始化一个数组rot但附加到它创建相同的行
[[0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 1], [0, 0, 0, 0, 0, 0, 0, 1]]
Run Code Online (Sandbox Code Playgroud)
如何处理这个问题?
PS:我不想用numpy之类的 numpy.eye(8)
现有的答案很好地解决了现有代码的问题,所以完全采用不同的方法:
>>> [[int(a==b) for b in range(8)] for a in range(8)]
[[1, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 0, 0, 1]]
Run Code Online (Sandbox Code Playgroud)
(由于我的易读性,我在输出中添加了一些换行符)