2010-07-03 38 views
53

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

+0

的可能的复制[简单的语法将列表元素引入python的前端?](https://stackoverflow.com/questions/1014523/simple-syntax-for-bringing-a-list-element-to-the-front-in-python ) – 2018-02-09 12:25:39

回答

96

使用列表的insert方法:

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

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

l[index:index] = [item] 

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

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

请记住,使用insert/pop方法移动列表中已有的项目将会有不同的行为,具体取决于您是向前还是向后移动o列表中。移到您选择的对象之前插入的左侧。移动到您选择的项目之后的后面。检查是否移动到列表的末尾(索引错误)。 – MKaras 2012-07-27 10:53:53

+0

如何移动多个元素?给定一个列表a = [1,2,3,4,5,6,7,8,9],如何将它转换为[1,2,[3,4,5],6,7,8,9 ]?这可以通过一步完成还是通过列表理解来完成? – g33kz0r 2013-02-21 19:04:49

+0

@MKaras我用Python 3.5测试了这个,你可以插入到'last index + 1'没有错误。在这种情况下,该元素仅附加到列表中。 – user2061057 2016-11-25 09:47:04

17

稍短的解决方案,只有移动的项目结束后,没有在任何地方是这样的:

l += [l.pop(0)] 

例如:

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

你也可以使用'l.append(l.pop(0))'。它只是稍微长一些,但它更具可读性。 – CoreDumpError 2017-01-11 20:27:39

+0

@CoreDumpError是的,它也是这样。我在'.append()'之前明显学习了'+ ='语法,因此我偏向于使用它。 – Tim 2017-01-11 20:28:40

7

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

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 
1

一个解决办法很简单,但是你要知道原来的位置的索引和新位置的索引:

list1[index1],list1[index2]=list1[index2],list1[index1] 
+1

这是一个交换,而不是一个移动。 – juzzlin 2016-11-24 18:19:54