Python中将列表元素置于前端的简单语法是什么?

93

我有一个由元素组成的数组。我想把一个给定的元素放在最前面,但是不改变其他元素的顺序。您有没有建议最干净的语法方式?

这是我能想到的最好方法,但是似乎使用N log N操作时,当使用N操作可以完成时,这样做不好。

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

您的原始代码非常清晰。同时,timsort(Python的内部排序算法)在长序列(例如([False, False, False, False, ..., False, True, False, False ... False ]))上运行速度特别快。 - r3m0t
@jpp 这个问题不应该被关闭。它是链接的“重复”问题的一个有意义的特例,但那个问题要泛化得多。 - Asclepius
@Asclepius,好的 - 已重新开放。 - jpp
4个回答

177

我的建议是:

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

1
我结合了Mike和Alex的答案(如下):“mylist.insert(0, mylist.pop(mylist.index(mylist[index_in_list])))”,因为我在列表中使用元组,而Alex的方法会出现错误。 - Anthony Petrillo

45

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

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

(Python使用标准的以0为基础的索引)


如果我们想要移动一个名为“hello!”的元素,但不知道它的索引怎么办? - Ulf Gjerdingen
1
@UlfGjerdingen 使用 index = mylist.index(targetvalue) - Elijas Dapšauskas

21
这只需要两个列表操作 (不需要索引): mylist.remove(目标值) mylist.insert(0, 目标值)

1
注意:以下代码(以及您提供的示例代码)将把所有匹配的元素放在前面。
x = targetvalue
for i in range(len(mylist)):
    if(mylist[i] == x):
        mylist = [mylist[i]] + mylist[:i] + mylist[i+1:]

例如,如果我的列表是[1, 2, 3, 4, 3],并且x = 3,则结果将为[3, 3, 1, 2, 4]。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接