Найти - Пользователи
Полная версия: List.insert внутри цикла for in - интересное поведение.
Начало » Python для новичков » List.insert внутри цикла for in - интересное поведение.
1
Lork
Решаю вот такую учебную задачу (вписана прямо в код). То, что цикл не обработал последние 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]
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]
Lork
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]

Благодарствую. Красиво и элегантно. Но, если принять во внимание, что enumerate() “мы ещё не проходили”, задача может быть решена только с использованием for…in и list.insert или же никак?
Romissevd
wallet
При нахождении значения числа в нечетной степени, Ваш код не сработает… Нужно пойти другим путем…
old_monty
Lork
Но, если принять во внимание, что enumerate() “мы ещё не проходили”, задача может быть решена только с использованием for…in и list.insert или же никак?
Для вашего частного случая можно решить и без enumerate().
 >>> 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]
>>> 
Lork
old_monty

Интересно, а в чём проявляется частность моего случая?

Так, понял. На нечётных степенях не работает.
old_monty
Lork
Интересно, а в чём проявляется частность моего случая?

Так, понял. На нечётных степенях не работает.
И на четных степенях в общем случае тоже не работает. Оставляю вам проверить это самостоятельно.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB