Форум сайта python.su
0
Напишите функцию modify_list(l), которая принимает на вход список целых чисел, удаляет из него все нечётные значения, а чётные нацело делит на два. Функция не должна ничего возвращать, требуется только изменение переданного списка, например:
lst =
print(modify_list(lst)) # None
print(lst) #
modify_list(lst)
print(lst) #
lst =
modify_list(lst)
print(lst) #
мой код
lst = [1, 2, 3, 4, 5, 6] def modify_list(l): i=0 le=len(l)-1 while i<le: if l[i]%2==0: l[i]=l[i]//2 i+=1 else: del l[i] print(modify_list(lst)) # None print(lst) # [1, 2, 3] modify_list(lst) print(lst)
Офлайн
568
pavel13079
1) Вы зафиксировали длину списка
le=len(l)-1
del l[i]
[1, 2, 3, 4, 5, 6] [0, 1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6] [0, 1, 2, 3, 4, 5] ^ counter = 2 l[counter] = 3
del l[2] [1, 2, 4, 5, 6] [0, 1, 2, 3, 4] ^ counter = 2
counter += 1 [1, 2, 4, 5, 6] [0, 1, 2, 3, 4] ^ counter = 3 l[counter] = 5
Отредактировано FishHook (Март 4, 2020 10:51:48)
Офлайн
27
Надо, после удаления элемента из списка, убавить le. Тогда твоя функция отработает нормально.
Отредактировано Rafik (Март 4, 2020 11:28:34)
Офлайн
568
Rafikнет не отработает, я для кого писал выше
Тогда твоя функция отработает нормально.
l = [0, 1, 2, 3, 4] le = len(l) - 1 i = 0 while i < le: print (i, l[i]) le -= 1 i += 1 del l[i]
C:\Python27\python.exe D:/tests/test.py
(0, 0)
(1, 2)
Офлайн
27
FishHookСкорее всего, ошибаетесь.
нет не отработает …
Отредактировано Rafik (Март 5, 2020 06:43:54)
Офлайн
568
Rafik
Скорее всего, ошибаетесь.Вполне может быть. Я бы сделал вот так, это более питонячий код, как мне кажется
def modify_list(l): ln = len(l) - 1 for i, item in enumerate(reversed(l)): index = ln - i if item % 2 == 0: l[index] = item // 2 continue del l[index]
Офлайн
27
FishHook, зачем реверсить список? Врубился. Наверное, это один из самых оптимальных вариантов.
UPD. Вот такой вариант тоже работает:
lst = [0,1,2,3,4,5,6,7] ln = len(lst) - 1 for i in range(ln, -1, -1): if lst[i] % 2 == 0: lst[i] = lst[i] // 2 else: del lst[i] print(lst)
Отредактировано Rafik (Март 5, 2020 17:49:28)
Офлайн