2010-07-03 81 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