在列表中移动项目?

Gab*_*lli 86 python list

在Python中,如何将项目移动到列表中的明确索引?

Dav*_*d Z 136

使用insert列表的方法:

l = list(...)
l.insert(index, item)
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用切片表示法:

l[index:index] = [item]
Run Code Online (Sandbox Code Playgroud)

如果要将列表中已有的项目移动到指定位置,则必须将其删除并将其插入新位置:

l.insert(newindex, l.pop(oldindex))
Run Code Online (Sandbox Code Playgroud)

  • 请记住,使用insert/pop方法移动列表中已有的项目将具有不同的行为,具体取决于您是否正在向列表的前面或后面移动.向左移动,在您选择的对象之前插入.移动到后面,在您选择的项目后插入.检查是否移动到列表末尾(索引错误). (19认同)

Tim*_*Tim 29

一个略短的解决方案,只将项目移动到最后,而不是任何地方:

l += [l.pop(0)]
Run Code Online (Sandbox Code Playgroud)

例如:

>>> l = [1,2,3,4,5]
>>> l += [l.pop(0)]
>>> l
[2, 3, 4, 5, 1]
Run Code Online (Sandbox Code Playgroud)

  • 你也可以使用`l.append(l.pop(0))`.它只是稍微长一点,但它更具可读性. (10认同)

nng*_*eek 15

如果您不知道项目的位置,您可能需要先找到索引:

old_index = list1.index(item)
Run Code Online (Sandbox Code Playgroud)

然后移动它:

list1.insert(new_index, list1.pop(old_index))
Run Code Online (Sandbox Code Playgroud)

或者恕我直言:

try:
  list1.remove(item)
  list1.insert(new_index, item)
except ValueError:
  pass
Run Code Online (Sandbox Code Playgroud)

  • 我认为我对你的 `pass` 语句感到畏缩是正确的......永远不要隐藏异常 - 在这样的例子中的默认事情应该是提供更清晰的错误语句或打印语句...... `raise ValueError(f'Unable将项目移动到 {new_index}')` 或 `print(f'Moving item to {new_index} 失败。列表保持不变。')`。如果在名为 `try_to_move_item` 的函数或其他函数中使用 `pass` 就可以了,这样它就可以理解该操作可能会静默失败。 (8认同)

V.P*_*tto 5

解决方案非常简单,但是您必须知道原始位置的索引和新位置的索引:

list1[index1],list1[index2]=list1[index2],list1[index1]
Run Code Online (Sandbox Code Playgroud)

  • 这是交换,而不是移动。 (10认同)