前一半与后一半的单列表轮换,包括奇数个元素

时间:2018-11-10 13:14:27

标签: python list rotation

l = [4,5,7,9,10,12]

def rotation(l,n):
    return l[n:] + l[:n]

print rotation(l,3)

让“ l”成为上面提到的列表,使用上面的代码,我可以将前半部分[4,5,7]与另一半部分[9,10,12]旋转,得到所需的输出[9] ,10,12,4,4,5,7]。但是,当元素数量奇数时,我想做的却无法弄清楚。假设l = [4,5,7,8,9,10,12]我希望中间的奇数(在这种情况下为[8])保留在中间,并且上半部分与最后一半,在这种情况下获得输出[9,10,12,8,4,5,7]

谢谢。

2 个答案:

答案 0 :(得分:1)

如果我明白这一点,那就可以了。

但是我认为不需要将第二个参数传递给方法(除非您正在寻找不同的东西)。

def rotation(l):
    size = len(l)
    n = size // 2
    res = l[-n:] + l[:n] if size % 2 == 0 else l[-n:] + [l[n]] + l[:n]
    return res

print(rotation([4,5,7,8,9,10])) #=> [8, 9, 10, 4, 5, 7]
print(rotation([4,5,7,8,9,10,12])) #=> [9, 10, 12, 8, 4, 5, 7]

答案 1 :(得分:1)

def rotation(l,n):
    if len(l) % 2 == 0:
        return l[n:] + l[:n]
    else:
        return l[-n:] + [l[n]] + l[:n]