2010-07-30 2 views
126

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

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

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

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

Я мог бы сделать это с помощью петля, например:

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

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

+1

Какая версия Python вы используете ? –

+0

Я использую python 2.6, спасибо –

ответ

262

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

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

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

numbers = map(int, numbers) 

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

numbers = list(map(int, numbers)) 
+8

В Python 3.x 'map' возвращает итератор вместо списка, поэтому его нужно записать как' list (map (int, numbers)) ', если необходим список. – kennytm

+0

@KennyTM: Спасибо. Обновлено. :) –

+2

Я думаю, что в настоящее время подход к пониманию списка немного предпочтительнее. – extraneon

3

Ano Ther путь,

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

OP сказал * pythonic * – SilentGhost

+2

нет, он сказал: «... больше pythonic» –

+3

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

8

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

sum(int(x) for x in numbers) 

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

12

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

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

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

numbers = map(int, x) 

быстрее.

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

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

+6

Не должно ли оно быть number = map (int, number)? – Karan

2

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

numbers = [*map(int, numbers)]

+0

Можете ли вы это объяснить? Я не знаком с этим синтаксисом. Благодаря! – abalter

+1

Я использую список распаковки аргументов (https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists) –

+0

Aha, python 3 вещь. Кажется странным, что '[]' принимает список аргументов. И я не знал, что вы можете передать итератору список аргументов. Я бы подумал сделать 'number = list (map (int, numbers))'. Но спасибо за объяснение! – abalter

Смежные вопросы