Форум сайта python.su
0
def modify_list(lst): i = 0 while i < len(lst): if lst[i] % 2 == 0: lst[i] //= 2 i += 1 else: lst.pop(i)
Офлайн
7
py.user.next
>>> def f(lst):
… i, n = 0, len(lst)
… while i < n:
… if lst % 2:
… lst.pop(i)
… n -= 1
… else:
… lst = int(lst / 2)
… i += 1
…
>>> lst =
>>> f(lst)
>>> lst
>>>
def f(lst): lst[:] = (k//2 for k in lst if not k&1)
Офлайн
7
NotDeadAlready
Синтаксис Питона сосредоточил в себе несуразности Лиспа и Фортрана. – Ларри Уолл, создатель Перла.
Офлайн
0
doza_and
Я в недоумении.def strange_function(a): for i in range(len(a))[::-1]: if (a[i]%2)>0: a.pop(i) else: a[i]=int(a[i]/2)
for i in range(len(a)) [::-1]
IsemВ функцию передается список. Список модифицируется при помощи генератора.
Ну что вы за люди такие.
def f(lst): lst[:] = (k//2 for k in lst if not k&1)
lst[:]
Отредактировано MrWild (Янв. 30, 2017 12:18:17)
Офлайн
857
MrWildВо втором питоне
Зачем тут срез?
>>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> range(10)[::-1] [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] >>>
>>> range(10) range(0, 10) >>> range(10)[::-1] range(9, -1, -1) >>>
>>> range(10) range(0, 10) >>> >>> reversed(range(10)) <range_iterator object at 0xb7581de8> >>> list(_) [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] >>>
MrWildЭто имя внутри функции и привязывание этого внутреннего имени к новому объекту, либо это взятие объекта по внутреннему имени и изменение этого объекта.
Какая разница между lst и просто lst
>>> def f(name): ... name = [3, 4, 5] ... >>> lst = [1, 2, 3] >>> >>> lst [1, 2, 3] >>> >>> f(lst) >>> >>> lst [1, 2, 3] >>> >>> >>> def f(name): ... name[:] = [3, 4, 5] ... >>> >>> lst [1, 2, 3] >>> >>> f(lst) >>> >>> lst [3, 4, 5] >>>
Отредактировано py.user.next (Янв. 30, 2017 12:45:33)
Офлайн
0
py.user.nextСпасибо большое за ответ.
Но лучше применять reversed()
Офлайн
857
MrWildУ тебя на каждом шаге цикла i растёт - 0, 1, 2, … . И когда там удаляется элемент в начале, то элементы справа от него сдвигаются влево, и на месте удалённого элемента появляется новый элемент, который надо проверять ещё. Но он не проверяется, потому что наступает следующий шаг и i вырастает, как бы пропуская его.
Единственное, что остается непонятным, так это смыл “переворачивать” индексацию списка.
i = 0
[1, 1, 2, 2, 3, 3, 4, 4] -> 1 надо удалить -> [1, 2, 2, 3, 3, 4, 4]
i = 1
[1, 2, 2, 3, 3, 4, 4] -> 2 надо оставить и поделить -> [1, 1, 2, 3, 3, 4, 4]
i = 2
[1, 1, 2, 3, 3, 4, 4] -> 2 надо оставить и поделить -> [1, 1, 1, 3, 3, 4, 4]
i = 3
[1, 1, 1, 3, 3, 4, 4] -> 3 надо удалить -> [1, 1, 1, 3, 4, 4]
...
Отредактировано py.user.next (Янв. 30, 2017 16:24:30)
Офлайн
0
О, еще раз благодарю. Я этот кусок кода крутил и так и эдак, а он некоторые значения в списке пропускал. Теперь стало понятно почему.
Офлайн
568
NotDeadAlreadyСудя по перманентно выдаваемому на протяжении пяти лет говнокоду вы не осисили ни того, ни другого, ни третьего. Может быть вам немного приумерить пыл и не говорить о том, чего вы не знаете?
Синтаксис Питона сосредоточил в себе несуразности Лиспа и Фортрана. – Ларри Уолл, создатель Перла.
Офлайн
20
FishHook2014 год же
Офлайн