Простой синтаксис для вывода элемента списка на передний план в python? [дубликат]


На этот вопрос уже есть ответ здесь:

У меня есть массив с набором элементов. Я хотел бы вывести данный элемент на передний план, но в остальном оставить порядок неизменным. Есть ли у людей предложения относительно самого чистого синтаксиса для этого?

Это лучшее, что я смог придумать, но кажется дурным тоном иметь N логов N операций, когда N операций может сделать.

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

Ура!, /YGA

5 34

5 ответов:

Я бы пошел с:

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

Чтобы вывести (например) 5-й элемент на передний план, используйте:

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

Для этого требуется всего две операции со списком (без индекса): mylist.remove(targetvalue) mylist.insert(0, targetvalue)

Примечание: следующий код (и пример кода, который вы предложили) поместит все соответствующие элементы спереди.

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].

Используя технику дизайна вставки (которая делает точно так же, как то, что предложил Майк):

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