2010-07-30 56 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; 

它是否必須如此醜陋?我確信在一行代碼中有更多的pythonic方法來做到這一點。請幫助我。

+1

你使用的是什麼版本的Python是? – 2010-07-30 12:17:13

+0

我使用python 2.6,謝謝 – 2010-08-02 09:12:43

回答

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 2010-07-30 12:16:46

+0

@KennyTM:謝謝。更新。 :) – 2010-07-30 12:20:10

+2

我認爲目前的列表理解方法是有點更受青睞。 – extraneon 2010-07-30 12:20:21

3

Ano療法的方式,

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

OP表示* pythonic * – SilentGhost 2010-07-30 12:29:24

+2

不,他說「...更多pythonic」 – 2010-07-30 12:33:59

+3

如果您希望僅對列表中的某些元素執行操作,此方法非常有用。這與此線程中的問題無關,但可能會出現這種情況。 – Dikla 2013-11-12 19:17:29

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 2015-01-13 13:37:39

2

的另一種方式,使其在Python 3:

numbers = [*map(int, numbers)]

+0

你能解釋一下嗎?我不熟悉那種語法。謝謝! – abalter 2016-11-21 09:20:05

+1

我正在使用解包參數列表(https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists) – 2016-11-21 09:39:26

+0

Aha,一個python 3的東西。看起來奇怪的是讓'[]'拿出一個參數列表。而且,我不知道你可以傳遞一個迭代器作爲參數列表。我會想'做'number = list(map(int,numbers))''。但感謝您的解釋! – abalter 2016-11-21 10:31:36

相關問題