在python中获取列表的轮换

Ani*_*dey 3 python list

我想要所有可能的单个右移阵列:

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)

Kev*_*vin 7

现有的答案很好地解决了现有代码的问题,所以完全采用不同的方法:

>>> [[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)

(由于我的易读性,我在输出中添加了一些换行符)