Форум сайта python.su
Решаю вот такую учебную задачу (вписана прямо в код). То, что цикл не обработал последние 8, -5 и 2 - это, как я понимаю, из-за увеличения кол-ва элементов списка относительно начального (поправьте, пжлста, если ошибаюсь). Но откуда там второй квадрат восьмёрки взялся (..,6, -8, 64, 64,…)???
Заранее благодарю.
"""Дан одномерный массив числовых значений, насчитывающий N элементов. После каждого отрицательного элемента вставить новый элемент, равный квадрату этого отрицательного элемента.""" d=[-6, 9, 0, 6, -8, -9, 2, 8, 5, -2] b=d[:] for i in d[:]: if d[i]<0: d.insert(i+1,d[i]**2) print('b=',b) print('d=',d)
b= [-6, 9, 0, 6, -8, -9, 2, 8, 5, -2] d= [-6, 36, 9, 0, 6, -8, 64, 64, -9, 2, 8, 5, -2]
Офлайн
видимо поведение соответствует вашему коду
d=[-6, 9, 0, 6, -8, -9, 2, 8, 5, -2] for n, i in enumerate(d): if i < 0: d.insert(n+1, i**2) print(d) #[-6, 36, 9, 0, 6, -8, 64, -9, 81, 2, 8, 5, -2, 4]
Офлайн
wallet
видимо поведение соответствует вашему коду
d=[-6, 9, 0, 6, -8, -9, 2, 8, 5, -2] for n, i in enumerate(d): if i < 0: d.insert(n+1, i**2) print(d) #[-6, 36, 9, 0, 6, -8, 64, -9, 81, 2, 8, 5, -2, 4]
Офлайн
walletПри нахождении значения числа в нечетной степени, Ваш код не сработает… Нужно пойти другим путем…
Отредактировано Romissevd (Фев. 24, 2017 23:26:14)
Офлайн
LorkДля вашего частного случая можно решить и без enumerate().
Но, если принять во внимание, что enumerate() “мы ещё не проходили”, задача может быть решена только с использованием for…in и list.insert или же никак?
>>> d=[-6, 9, 0, 6, -8, -9, 2, 8, 5, -2] >>> for e in d: ... if e < 0: ... d.insert(d.index(e)+1, e**2) ... >>> print(d) [-6, 36, 9, 0, 6, -8, 64, -9, 81, 2, 8, 5, -2, 4] >>>
Офлайн
old_monty
Отредактировано Lork (Фев. 24, 2017 23:42:51)
Офлайн
LorkИ на четных степенях в общем случае тоже не работает. Оставляю вам проверить это самостоятельно.Интересно, а в чём проявляется частность моего случая?
Так, понял. На нечётных степенях не работает.
Офлайн