Вызывать функцию int() для каждого элемента списка?

У меня есть список с числовыми строками, например:

numbers = ['1', '5', '10', '8'];

Я хотел бы преобразовать каждый элемент списка в integer, поэтому он будет выглядеть так:

numbers = [1, 5, 10, 8];

Я мог бы сделать это, используя цикл, например:

new_numbers = [];
for n in numbers:
    new_numbers.append(int(n));
numbers = new_numbers;

Нужно ли быть таким уродливым? Я уверен, что есть более питонический способ сделать это в одной строке кода. Пожалуйста, помогите мне.

Ответ 1

Вот что понимает список:

numbers = [ int(x) for x in numbers ]

Ответ 2

В Python 2.x другой подход заключается в использовании map:

numbers = map(int, numbers)

Примечание: в Python 3.x map возвращается объект карты, который вы можете преобразовать в список, если хотите:

numbers = list(map(int, numbers))

Ответ 3

просто точка,

numbers = [int(x) for x in numbers]

понимание списка более естественно, а

numbers = map(int, x)

быстрее.

Вероятно, в большинстве случаев это не имеет значения.

Полезно читать: LP vs map

Ответ 4

Если вы собираетесь передать эти целые числа функции или метода, рассмотрите этот пример:

sum(int(x) for x in numbers)

Эта конструкция намеренно удивительно похожа на список понятий, упомянутых adamk. Без квадратных скобок он называется выражением генератора и является очень эффективным для памяти способом передачи списка аргументов методу. Хорошее обсуждение доступно здесь: Выражения генератора и понимание списка

Ответ 5

Другой способ,

for i, v in enumerate(numbers): numbers[i] = int(v)

Ответ 6

Другой способ сделать это в Python 3:

numbers = [*map(int, numbers)]