Ответ 1
Я бы пошел с:
mylist.insert(0, mylist.pop(mylist.index(targetvalue)))
У меня есть массив с набором элементов. Я хотел бы привести данный элемент на передний план, но в остальном оставить порядок неизменным. У людей есть предложения относительно чистого синтаксиса для этого?
Это лучшее, что мне удалось придумать, но, похоже, плохая форма имеет операцию N log N, когда может выполняться операция N.
mylist = sorted(mylist,
key=lambda x: x == targetvalue,
reverse=True)
Cheers, /YGA
Я бы пошел с:
mylist.insert(0, mylist.pop(mylist.index(targetvalue)))
Чтобы вывести (например) 6-й элемент вперед, используйте:
mylist.insert(0, mylist.pop(5))
(Python использует стандартную индексацию на основе 0)
Для этого требуется всего две операции списка (без индекса):
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