說我有一個字符串:line = "[1, 2, 12]\n"
,我想將其轉換爲整數的列表:[1, 2, 12]
如何將字符串列表轉換爲整數列表?
我有解決方案:
new_list = []
for char in line:
try:
new_list.append(int(char))
except ValueError:
pass
但是,這並不在的情況下工作具有多個數字的數字。有沒有內置/更好的方法來做到這一點?由於
說我有一個字符串:line = "[1, 2, 12]\n"
,我想將其轉換爲整數的列表:[1, 2, 12]
如何將字符串列表轉換爲整數列表?
我有解決方案:
new_list = []
for char in line:
try:
new_list.append(int(char))
except ValueError:
pass
但是,這並不在的情況下工作具有多個數字的數字。有沒有內置/更好的方法來做到這一點?由於
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
循環將每個字符串元素轉換爲數字。
您可以使用正則表達式:
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]
。
正則表達式:\d+
會一次或多次重複(+
),或在這種情況下digit
(\d
)以前RE
左右。所以,我們可以通過re.findall()
查找所有匹配的字符串來使用它。
然而,這將返回ints
的list
:1
,2
和12
但作爲字符串,所以我們可以使用列表理解到這些轉換成類型int
。
你的代碼可能看起來是這樣的:
import re
s = "[1, 2, 12]\n"
l = [int(i) for i in re.findall("\d+", s)]
print(l)
這會給名單:[1, 2, 12]
這是相同的'regex'我用的!但它將'ints'作爲'strings'返回,因此您可以輕鬆地將它們轉換爲單行列表理解。由於您沒有與OP有同樣的問題,因此不需要嘗試,除了''語句。 for循環沒有循環通過原來的'string'中的'chars',它循環遍歷'regex'的結果,因此不需要測試它是否可以轉換爲int,因爲'regex'只會返回'ints'。 :) –
@JoeIddon是的,你有很好的lambda。 – BladeMight