Переместить элемент в начало списка при использовании для в цикле - PullRequest
2 голосов
/ 26 февраля 2020

Какой самый лучший способ Pythoni c для перемещения элемента в начало списка, когда итерация по списку с for in l oop?

Таким образом:

for item in items:
    if condition:
        # Move `item` to front of `items`
        break

Ответы [ 5 ]

2 голосов
/ 26 февраля 2020

Изменение списка во время итерации по нему, как правило, не рекомендуется, например:

>>> ctr = 0
>>> lst = [1,2,3,4,5,6]
>>> for i in lst:
...:     if ctr == 3:
...:         lst.insert(0,lst.pop(ctr))
...:         break
...:     ctr += 1
...:
>>> lst
[4, 1, 2, 3, 5, 6]

Или,

>>> lst = [1,2,3,4,5,6]
>>> for i,x in enumerate(lst):
...     if x == 3:
...         lst.insert(0,lst.pop(i))
...         break
>>> lst
[3, 1, 2, 4, 5, 6]
1 голос
/ 26 февраля 2020

Было бы наименее подверженным ошибкам делать вещи «ручным» способом:

new_items = []
for item in items:
    if condition:
        new_items.insert(0, item)  # Prepend
    else:
        new_items.append(item)  # Append
# if you need to modify `items` "in-place", assign to a slice:
items[:] = new_items
0 голосов
/ 26 февраля 2020

Использование только техники нарезки:

data = list(range(10))

for i, j in enumerate(data):
    if i == 5:
        # shift all numbers left of j one position to the right
        l[1:i+1] = l[:i]
        l[0] = j
        break

Дает следующий результат:

>>> data
[5, 0, 1, 2, 3, 4, 6, 7, 8, 9]
0 голосов
/ 26 февраля 2020

Это число, о котором мы говорим? В нашем примере, наше условие: если число больше 2, поместите его перед списком, иначе добавьте.

items = [5, 3, -2, 3, 1,]

new_list = []

for item in items:
    if item > 2:
        new_list.insert(0, item)
    else:
        new_list.append(item)

print(new_list)

Что это напечатает в нашем новом списке.

[3, 3, 5, -2, 1]
0 голосов
/ 26 февраля 2020

Я бы что-то вроде этого:

for idx, item in enumerate(items):
   if 'condition on item':
      items.pop(idx)
      items.insert(0, item)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...