python通过矩阵操作得到想要的结果

[5 4 3 2 1
5 4 3 1 2
5 4 2 3 1
5 4 1 3 2
5 4 2 1 3
5 4 1 2 3
5 3 4 2 1
5 3 4 1 2
5 2 4 3 1
5 1 4 3 2
5 2 4 1 3
5 1 4 2 3]
上述矩阵是否存在一个矩阵操作算法得到以下结果
每一行出现相邻的目标数字,即在该数组中记为0,反之记为1,首尾也算相邻,例如
S1_2=[0,0,1,1,0,0,0,0,1,1,1,1]
S1_3=[1,0,0,0,0,1,1,1,0,1,0,1]
S1_4=[1,1,1,0,1,0,1,0,1,0,0,0]
S1_5=[0,1,0,1,1,1,0,1,0,0,1,0]
S2_3=[0,1,0,0,1,0,1,1,1,0,1,0]
S2_4=[1,1,0,1,0,1,0,1,0,1,0,0]
S2_5=[1,0,1,0,1,1,1,0,0,0,0,1]
S3_4=[0,0,1,1,1,1,0,0,0,0,1,1]
S3_5=[1,1,1,1,0,0,0,0,1,1,0,0]
S4_5=[0,0,0,0,0,0,1,1,1,1,1,1]
共10个数组

我用矩阵乱算算出来了,结题了

m=\
[[5,4,3,2,1], 
[5,4,3,1,2], 
[5,4,2,3,1], 
[5,4,1,3,2], 
[5,4,1,2,3], 
[5,3,4,2,1], 
[5,3,4,1,2], 
[5,2,4,3,1], 
[5,1,4,3,2], 
[5,2,4,1,3], 
[5,1,4,2,3]]

for k in range(1, 5):
    for j in range(k + 1, 6):   
        s = []
        for l in m:        
            v = abs(l.index(k) - l.index(j))
            s.append(0 if v == 1 or v == 4 else 1)
        st = f'S{k}_{j}={s}'
        print(st)
        exec(st)
        # print(eval(f'S{k}_{j}'))