У меня есть список с числовыми строками, как так:
numbers = ['1', '5', '10', '8'];
Я хотел бы преобразовать каждый элемент списка в целое число, таким образом, это будет похоже на это:
numbers = [1, 5, 10, 8];
Я мог сделать это с помощью цикла, как так:
new_numbers = [];
for n in numbers:
new_numbers.append(int(n));
numbers = new_numbers;
Это должно быть настолько ужасно? Я уверен, что существует больше pythonic способа сделать это в одной строке кода. Выручите меня.
Это то, для чего предназначены списки :
numbers = [ int(x) for x in numbers ]
В Python 2.x другой подход заключается в использовании map
:
numbers = map(int, numbers)
Примечание: в Python 3.x map
возвращает объект карты, который вы можете преобразовать в список, если хотите:
numbers = list(map(int, numbers))
Другой способ,
for i, v in enumerate(numbers): numbers[i] = int(v)
Если вы намереваетесь передать эти целые числа в функцию или метод, рассмотрите следующий пример:
sum(int(x) for x in numbers)
Эта конструкция намеренно очень похожа на понимание списков, упомянутых adamk. Без квадратных скобок оно называется выражением генератора и является очень эффективным с точки зрения памяти способом передачи списка аргументов методу. Хорошее обсуждение доступно здесь: Выражения генератора против понимания списков
просто замечание,
numbers = [int(x) for x in numbers]
понимание списка более естественно, а
numbers = map(int, numbers)
быстрее.
Вероятно, в большинстве случаев это не имеет значения
Полезное чтение: LP vs map