Ответ 1
Вот что понимает список:
numbers = [ int(x) for x in numbers ]
У меня есть список с числовыми строками, например:
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;
Нужно ли быть таким уродливым? Я уверен, что есть более питонический способ сделать это в одной строке кода. Пожалуйста, помогите мне.
Вот что понимает список:
numbers = [ int(x) for x in numbers ]
В Python 2.x другой подход заключается в использовании map
:
numbers = map(int, numbers)
Примечание: в Python 3.x map
возвращается объект карты, который вы можете преобразовать в список, если хотите:
numbers = list(map(int, numbers))
просто точка,
numbers = [int(x) for x in numbers]
понимание списка более естественно, а
numbers = map(int, x)
быстрее.
Вероятно, в большинстве случаев это не имеет значения.
Полезно читать: LP vs map
Если вы собираетесь передать эти целые числа функции или метода, рассмотрите этот пример:
sum(int(x) for x in numbers)
Эта конструкция намеренно удивительно похожа на список понятий, упомянутых adamk. Без квадратных скобок он называется выражением генератора и является очень эффективным для памяти способом передачи списка аргументов методу. Хорошее обсуждение доступно здесь: Выражения генератора и понимание списка
Другой способ,
for i, v in enumerate(numbers): numbers[i] = int(v)
Другой способ сделать это в Python 3:
numbers = [*map(int, numbers)]