在列表中移动项目?

问题描述 投票:0回答:9

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

python list
9个回答
214
投票

使用列表的

insert
方法:

l = list(...)
l.insert(index, item)

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

l[index:index] = [item]

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

l.insert(newindex, l.pop(oldindex))

46
投票

如果你不知道该item的位置,你可能需要先找到索引:

old_index = list1.index(item)

然后移动它:

list1.insert(new_index, list1.pop(old_index))

或者恕我直言,一种更干净的方式:

list1.remove(item)
list1.insert(new_index, item)

45
投票

一个稍微短一点的解决方案,仅将项目移动到末尾,而不是任何地方:

l += [l.pop(0)]

例如:

>>> l = [1,2,3,4,5]
>>> l += [l.pop(0)]
>>> l
[2, 3, 4, 5, 1]

5
投票

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

list1[index1],list1[index2]=list1[index2],list1[index1]

1
投票

我介绍了一些使用 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)) │
└──────────┴──────────────────────┘

这是要使用的 if 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] │
└──────────┴──────────────────────────┘

如果您只使用几次,差别并不大,但如果您要做手动排序等繁重的工作,那么选择最快的就很重要。否则,我建议只选择您认为最具可读性的一个。


1
投票

我更喜欢用这样的一种表达方式来做到这一点:

>>> l = [1,2,3,4,5]
>>> [*l, l.pop(0)]
[2, 3, 4, 5, 1]

0
投票
l = list(...) #replace ... with the list contents
if item in l: #Checks if the item to be moved is present in the list
    l.remove(item) #  Removes the item from the current list if the previous line's conditions are achieved
l.insert(new_index,item) # Adds item to new list

0
投票

向前(从左到右)交换示例:

>>> abc = [1,2,3,4,5]
>>> abc.insert(0, abc.pop(len(abc)-1))

[5, 1, 2, 3, 4]

0
投票

递归冒泡排序。其中 n 以 arr[] 的长度开始:

def cursed_bubble(arr,n): 
    if n <= 1: return 
    # largest element to end of this slice
    arr[n-1:n-1] = [arr.pop(arr[:n].index(max(arr[:n])))]
    return cursed_bubble(arr,n-1) # smaller slice
© www.soinside.com 2019 - 2024. All rights reserved.