python - 将列表中的单个或多个连续项目移动到任意位置
问题描述
我需要在列表中移动单个或多个连续项目,按顺序我的意思是如果项目不止一个,则它们的列表索引中没有间隙,这是我尝试过的......
def move(x, tomove, idx):
move_start = tomove[0]
move_end = tomove[-1] + 1
if idx == len(x) or idx == len(x) - 1:
return x[:move_start] + x[move_end:] + x[move_start:move_end]
elif idx == 0:
return x[move_start:move_end] + x[:move_start] + x[move_end:]
else:
pass
# move to start
print (move([0,1,2,3,4,5,6],
[2],
0))
# expected output [2,0,1,3,4,5,6]
# move to end
print (move([0,1,2,3,4,5,6],
[2],
6))
# expected output [0,1,3,4,5,6,2]
# move forward single
print (move([0,1,2,3,4,5,6],
[2],
3))
# expected output [0,1,3,2,4,5,6]
# move backward single
print (move([0,1,2,3,4,5,6],
[2],
1))
# expected output [0,2,1,3,4,5,6]
# move forward multiple
print (move([0,1,2,3,4,5,6],
[2,3],
5))
# expected output [0,1,4,5,2,3,6]
# move backward multiple
print (move([0,1,2,3,4,5,6],
[4,5],
2))
# expected output [0,1,4,5,2,3,6]
解决方案
由于您没有提到任何有关验证的内容,例如原始列表中不存在给定的元素序列、主列表和给定列表的排序等。我没有考虑任何验证。
在进入代码之前,让我们看看如何破解解决方案。首先,您需要确定给定列表在主列表中的现有位置。
move_list_pos = lis.index(move_list[0])
现在,检查给定的列表是向前还是向后移动。
- 如果它需要向后移动,那么他们在主列表中没有变化,直到新的位置,插入给定的列表,继续主列表,除了给定的列表。
- 如果它需要向前移动,那么除了主列表中的给定列表之外,主列表应该在那里直到新位置,添加给定列表,从新位置继续主列表到结束。
解决方案代码:
def move(lis,move_list,pos):
move_list_pos = lis.index(move_list[0])
if pos<move_list_pos:
return lis[:pos]+move_list+lis[pos:move_list_pos]+lis[move_list_pos+len(move_list):]
else:
return lis[:move_list_pos]+lis[move_list_pos+len(move_list):pos+1]+move_list+lis[pos+1:]
推荐阅读
- typescript - 如何以更易读的方式用现有类型定义函数类型?
- deployment - EPPlus.Core 安全吗?
- r - 如何将数据输入ggplots
- c - How do you continue to scan until new line C without using (fgets)
- c++ - C++ 结构默认调用值
- c - C相同的代码,VScode编译,VisualStudio没有
- google-apps-script - GDrive 禁用复制和下载
- javascript - 将 C# 内联变量传递给 ASP.Net 应用程序中的 Javascript 函数
- javascript - 修改此白名单函数,使其返回具有特定键值字段的对象
- python - 使用 .split() 函数后切片不起作用