我正在尝试在Python中编写一个函数,它将重新排列指定的项目,将其移动到新的位置,其他项目将相互关联。
该函数接受两个参数:
old_index - 项目的当前索引 new_index - 索引我们想要移动项目的索引
假设我有这个清单:
list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
我决定在字母'b'之前移动字母'f'。这意味着old_index = 5
和new_index = 1
。完成此操作后,我希望移动字母而不是交换字母,从而导致:
list = ['a', 'f', 'b', 'c', 'd', 'e', 'g']
我想出了以下功能:
def shift_letters(old_index, new_index):
shifted = list.index(list[old_index])
selected = list[old_index]
print 'selected', selected
list.insert(new_index, selected)
print 'inserted %s at %s' % (selected, new_index)
if old_index < new_index:
removed = list.pop(shifted - 1)
else:
removed = list.pop(shifted + 1)
print 'removed %s' % removed
但这并不是很有效。如果可能的话,我想避免复制列表(我的应用程序中的列表可能非常大)。
答案 0 :(得分:3)
从旧索引弹出,插入所需的索引。
>>> mylist = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> old_index = 5
>>> new_index = 1
>>>
>>> mylist.insert(new_index, mylist.pop(old_index))
>>> mylist
['a', 'f', 'b', 'c', 'd', 'e', 'g']
答案 1 :(得分:1)
def shift_letters(list, old_index, new_index):
value = list.pop(old_index)
list.insert(new_index, value)
答案 2 :(得分:1)
所以也许:
ls.insert(new, ls.pop(old))
?