在Python中,如何将项目移至列表中的确定索引?
在Python中,如何将项目移至列表中的确定索引?
Answers:
使用insert
列表的方法:
l = list(...)
l.insert(index, item)
另外,您可以使用切片符号:
l[index:index] = [item]
如果要将列表中已经存在的项目移动到指定位置,则必须将其删除并将其插入新位置:
l.insert(newindex, l.pop(oldindex))
last index + 1
。在这种情况下,该元素只是追加到列表中。
a.insert(99999, 1)
In [14]: a
Out[14]: [...., 1]
稍微短一点的解决方案,它只将项目移到末尾,而不是在任何地方:
l += [l.pop(0)]
例如:
>>> l = [1,2,3,4,5]
>>> l += [l.pop(0)]
>>> l
[2, 3, 4, 5, 1]
l.append(l.pop(0))
。它只是稍长一些,但可读性更高。
如果您不知道商品的位置,则可能需要先找到索引:
old_index = list1.index(item)
然后移动它:
list1.insert(new_index, list1.pop(old_index))
或恕我直言,更干净的方法:
try:
list1.remove(item)
list1.insert(new_index, item)
except ValueError:
pass
pass
陈述感到畏缩是正确的...永远不要隐藏异常-这样的示例中的默认值应该是提供更清晰的错误陈述或打印陈述... raise ValueError(f'Unable to move item to {new_index}')
或print(f'Moving item to {new_index} failed. List remains unchanged.')
。也许pass
将是确定的,如果在函数调用try_to_move_item
或东西,以便其了解,操作可能静默失败。
解决方案非常简单,但是您必须知道原始位置的索引和新位置的索引:
list1[index1],list1[index2]=list1[index2],list1[index1]
我介绍了一些方法,可以通过timeit在同一列表中移动项目。如果j> i,这是要使用的那些:
──────────┬────────┐ │14.4usec│x [i:i] = x.pop(j),│ │14.5usec│x [i:i] = [x.pop(j)]│ │15.2usec│x.insert(i,x.pop(j))│ ──────────┴────────┘
这里是j <= i时要使用的那些:
┐──────────┬─────────┐ │14.4usec│x [i:i] = x [j] ,; del x [j]│ │14.4usec│x [i:i] = [x [j]]; del x [j]│ │15.4usec│x.insert(i,x [j]); del x [j]│ ┘──────────┴─────────┘
如果仅使用几次,则不会有太大的区别,但是如果您进行繁重的工作(如手动分拣),则选择最快的就很重要。否则,我建议您只阅读您认为最易读的内容。