Подтвердить что ты не робот

Простой синтаксис для приведения элемента списка в начало в python?

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

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

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

Cheers, /YGA

4b9b3361

Ответ 1

Я бы пошел с:

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

Ответ 2

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

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

(Python использует стандартную индексацию на основе 0)

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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