Python 与简单的反向函数作斗争
我想反转列表的中间部分:Python 与简单的反向函数作斗争,python,list,Python,List,我想反转列表的中间部分: ls = [1,2,3,4,5,6,7,8,9,10] [1,2,3,7,6,5,4,8,9,10] 如您所见,三个元素[1,2,3]在开始时没有反转,在结束时也没有反转[8,9,10] 但我就是想不出如何优雅地去做。我尝试了很多组合,例如: ls2 = ls[:4] + ls[::-1] + ls[:-4] 但我得到了重复的。任何帮助都将不胜感激 ls= ls[:3]+ls[3:7][::-1]+ls[7:] ls[:-1]将反转整个列表,您需要设置起点和终点
ls = [1,2,3,4,5,6,7,8,9,10]
[1,2,3,7,6,5,4,8,9,10]
如您所见,三个元素[1,2,3]在开始时没有反转,在结束时也没有反转[8,9,10]
但我就是想不出如何优雅地去做。我尝试了很多组合,例如:
ls2 = ls[:4] + ls[::-1] + ls[:-4]
但我得到了重复的。任何帮助都将不胜感激
ls= ls[:3]+ls[3:7][::-1]+ls[7:]
ls[:-1]将反转整个列表,您需要设置起点和终点。
您只需将所需切片反向分配给目标切片:
ls[3:7] = ls[6:2:-1]
对于任意长度l的列表,假设我们想保持 intl/3,中间反转
l = len(s); n = int(l/3)
ls[:n] + ls[-n-1:n-1:-1] + ls[-n:]
ls[3:7][::-1]似乎有些过分了。为什么不是ls[6:2:-1]?顺便说一下,这不是对现有对象的就地修改,而是对名称的重新分配。ls[3:-3]=ls[-4:2:-1]的读取时间较短,只创建一个临时列表而不是3个,并就地修改现有对象。
ls[3:7] = ls[6:2:-1]
l = len(s); n = int(l/3)
ls[:n] + ls[-n-1:n-1:-1] + ls[-n:]