аватар question@mail.ru · 01.01.1970 03:00

Перевод списка строк в список чисел

a - список строк :['0', '0', '0', '0', '0', '0', '0', '0', '0', '0']

for el in a:    el = int(el)

пытался таким способом преобразовать в числа, но в преобразует в рамках данного цикла

 

аватар answer@mail.ru · 01.01.1970 03:00

Наиболее идиоматический и идеологически выверенный способ:

result = [int(item) for item in a]

Для любителей функционального стиля:

result = list(map(int, a))

Тут функция map применяет функцию int к каждому элементу объекта a, потом результат преобразовывается в список.

Такой вариант считается менее ""питоничным"", но тоже имеет право на существование (как минимум, во многих случаях запись через map получается более компактной, чем вариант через списочное выражение).


По поводу вашего первого варианта: когда вы пишете for el in a, то каждый раз в цикле в el записывается ссылка на элемент списка. Но когда вы пишете el = int(el), то в переменную el просто записывается другая ссылка, сам элемент списка не меняется.

Как понять, что это именно ссылка, а не копия элемента? Вот пример, как при помощи вызова метода элемента списка меняется сам элемент:

>>> a = [[], [], []]>>> for el in a:        el.append(1)>>> a[[1], [1], [1]]

По поводу вашего ответа, перебор со счетчиком (если он вам вдруг действительно понадобится) на Python правильнее (проще и приятнее, без всяких len вложенных в range) делать через enumerate:

for i, item in enumerate(a):    a[i] = int(item)

 

Последние

Похожие