Назвать интервал () функцией на каждом элементе списка?

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

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 способа сделать это в одной строке кода. Выручите меня.

172
задан martineau 2 February 2017 в 21:21
поделиться

5 ответов

Это то, для чего предназначены списки :

numbers = [ int(x) for x in numbers ]
335
ответ дан 23 November 2019 в 20:37
поделиться

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

numbers = map(int, numbers)

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

numbers = list(map(int, numbers))
127
ответ дан 23 November 2019 в 20:37
поделиться

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

for i, v in enumerate(numbers): numbers[i] = int(v)
3
ответ дан 23 November 2019 в 20:37
поделиться

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

sum(int(x) for x in numbers)

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

9
ответ дан 23 November 2019 в 20:37
поделиться

просто замечание,

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

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

numbers = map(int, numbers)

быстрее.

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

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

20
ответ дан 23 November 2019 в 20:37
поделиться
Другие вопросы по тегам:

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