2017-08-05 197 views
3

說我有一個字符串:line = "[1, 2, 12]\n"
,我想將其轉換爲整數的列表:[1, 2, 12]如何將字符串列表轉換爲整數列表?

我有解決方案:

new_list = [] 
for char in line: 
    try: 
     new_list.append(int(char)) 
    except ValueError: 
     pass 

但是,這並不在的情況下工作具有多個數字的數字。有沒有內置/更好的方法來做到這一點?由於

回答

2
new_list = [int(num) for num in line.strip('[]\n').split(', ')] 

更可讀的解決方案將是:

line = line.strip('[]\n') 
list_of_strs = line.split(', ') 
list_of_nums = [] 
for elem in list_of_strs: 
    list_of_nums.append(int(elem)) 

首先line被剝離封閉括號和換行符。然後剩下的字符串以逗號分隔,結果保存在列表中。現在我們有一個元素列表,其中每個數字仍然是一個字符串。然後for循環將每個字符串元素轉換爲數字。

0

您可以使用正則表達式:

import re 
line = "[1, 2, 12]\n" 
new_list = [] 
for char in re.findall("\d+", line): 
    try: 
     new_list.append(int(char)) 
    except ValueError: 
     pass 
print(new_list) 

結果:[1, 2, 12]

+0

這是相同的'regex'我用的!但它將'ints'作爲'strings'返回,因此您可以輕鬆地將它們轉換爲單行列表理解。由於您沒有與OP有同樣的問題,因此不需要嘗試,除了''語句。 for循環沒有循環通過原來的'string'中的'chars',它循環遍歷'regex'的結果,因此不需要測試它是否可以轉換爲int,因爲'regex'只會返回'ints'。 :) –

+0

@JoeIddon是的,你有很好的lambda。 – BladeMight

0

正則表達式和列表理解:

正則表達式:\d+會一次或多次重複(+),或在這種情況下digit\d)以前RE左右。所以,我們可以通過re.findall()查找所有匹配的字符串來使用它。

然而,這將返回intslist1212但作爲字符串,所以我們可以使用列表理解到這些轉換成類型int

你的代碼可能看起來是這樣的:

import re 

s = "[1, 2, 12]\n" 

l = [int(i) for i in re.findall("\d+", s)] 

print(l) 

這會給名單:[1, 2, 12]

相關問題