创建一个重新排列列表中的项目并移动其他项目的函数(Python)

时间:2015-05-11 23:07:14

标签: python list

我正在尝试在Python中编写一个函数,它将重新排列指定的项目,将其移动到新的位置,其他项目将相互关联。

该函数接受两个参数:

old_index - 项目的当前索引 new_index - 索引我们想要移动项目的索引

假设我有这个清单:

list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

我决定在字母'b'之前移动字母'f'。这意味着old_index = 5new_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

但这并不是很有效。如果可能的话,我想避免复制列表(我的应用程序中的列表可能非常大)。

3 个答案:

答案 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))