bimka
@bimka
Осваиваю Питон

Как изменять элементы списка?

Никак не могу понять, почему при использовании цикла for для списка, если я хочу изменить элемент списка, то измененный элемент не сохраняется. Приходится создавать новые одноразовые переменные, тем самым делая код избыточным. Например:
def accum(s):
    a = 1
    b = []
    c = []
    for i in s.lower():
        b.append(i * a)
        a += 1
    for i in b:
       i = i.title()
       c.append(i)
    return '-'.join(c)


Пришлось создавать переменную с, которую я совсем не хочу создавать. Как вносить изменения в элементы списка в таких случаях?
  • Вопрос задан
  • 7941 просмотр
Решения вопроса 2
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
for f in foo:
    f = 'bla-bla-bla'

f - это всего лишь переменная, которая ссылается на элемент итерируемого объекта. Изменяя значение f ты лишь меняешь на какой элемент она будет ссылаться, а не сам элемент итерируемого объекта.
Если ты хочешь поменять элемент объекта, то делать это нужно (на самом деле не нужно, только если ну очень уж хочется) примерно так:
>>> foo = [1,2,3,4,5,6]
>>> for key, value in enumerate(foo):
...     foo[key] = value * value
...
>>> foo
[1, 4, 9, 16, 25, 36]
Ответ написан
adugin
@adugin Куратор тега Python
'-'.join(letter * times for times, letter in enumerate('test', 1)).title()

from operator import mul
from itertools import starmap

'-'.join(starmap(mul, enumerate('test', 1))).title()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@o5a
В таких случаях часто используются генераторы списков (list comprehension). Они как раз позволят заполнить список без создания этих промежуточных переменных. И данная функция будет выглядеть например так:
def accum(s):
    b = [(i+1) * a for i, a in enumerate(s)]
    return '-'.join([i.title() for i in b])
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы