Страницы

Поиск по вопросам

пятница, 31 января 2020 г.

Перемещение элементов в списке

#python #алгоритм #python_3x #list


У меня есть список:

lst = [1, 1, 0, 1, 0, 0, 1]


Если после единицы стоит ноль,то надо поменять их местами так,что если перед ней
стоит два нуля то,единица должна поменяться местами только с первым нулём.

То есть должно получиться так :

lst = [1, 0, 1, 0, 1, 0, 1]


Спасибо за помощь
    


Ответы

Ответ 1



i=0 while i < len(lst)-1: if lst[i] == 1 and lst[i+1] == 0: lst[i], lst[i+1] = lst[i+1], lst[i] i += 1 i += 1

Ответ 2



Вариант решения с преобразованием списка в строку, заменой и преобразованием строки обратно в список: In [67]: list(map(int, ''.join(map(str, lst)).replace('10', '01'))) Out[67]: [1, 0, 1, 0, 1, 0, 1] пошагово: In [68]: ''.join(map(str, lst)) Out[68]: '1101001' In [69]: ''.join(map(str, lst)).replace('10', '01') Out[69]: '1010101'

Ответ 3



Если входной список без изменения необходимо оставить: result = lst[:] # copy for i, (current, next_) in enumerate(zip(lst, lst[1:])): if current == 1 and next_ == 0: result[i+1], result[i] = result[i], result[i+1] # swap Результат: 1 0 1 0 1 0 1

Ответ 4



На ~10% быстрее чем в первом ответе: for i in (i + 0 for i in [j for j in [i for i in range(len(lst)-1) if lst[i] == 1 and lst[i+1] == 0]]): lst[i], lst[i + 1] = lst[i + 1], lst[i]

Комментариев нет:

Отправить комментарий