在python中将列表元素放到前面的简单语法?

时间:2009-06-18 18:52:58

标签: python

我有一组包含一组元素的数组。我想把一个给定的元素带到前面,否则保持顺序不变。人们对这个最干净的语法有什么建议吗?

这是我能够提出的最好的,但是当N操作可以执行N log N操作时似乎是不好的形式。

    mylist = sorted(mylist,
                    key=lambda x: x == targetvalue,
                    reverse=True)

干杯, / YGA

5 个答案:

答案 0 :(得分:89)

我会选择:

mylist.insert(0, mylist.pop(mylist.index(targetvalue)))

答案 1 :(得分:26)

要将第5个元素(例如)带到前面,请使用:

mylist.insert(0, mylist.pop(5))

答案 2 :(得分:14)

这只需要两个列表操作(无索引): mylist.remove(targetvalue) mylist.insert(0, targetvalue)

答案 3 :(得分:1)

注意:以下代码(以及您提供的示例代码)将在前面放置所有匹配元素。

x = targetvalue
for i in range(len(mylist)):
    if(mylist[i] == x):
        mylist = [mylist[i]] + mylist[:i] + mylist[i+1:]

例如,如果mylist = [1,2,3,4,3]和x = 3,则会产生[3,3,1,2,4]。

答案 4 :(得分:1)

使用插入设计技术(与Mike建议的完全相同):

def move-to-front(key, mylist):
   for i in range(len(mylist[:mylist.index(key)]), -1, -1):
      mylist[i] = mylist[i - 1]
   mylist[0] = key