#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]
Комментариев нет:
Отправить комментарий