[英]How to remove strings that contain letters from a list?
我有一個包含字母、字符和數字的字符串的列表:
list = ['hello', '2U:', '-224.3', '45.1', 'SA 2']
我只想將數字保留在列表中並將它們轉換為float
值。 我怎樣才能做到這一點? 我希望列表如下所示:
list = ['-224.3'. '45.1']
當我從 Arduino 執行 serial.readline() 時,會創建該列表,它為我提供了一個由命令和數據點組成的字符串。 所以我看起來像這樣:
'hello,2U:,-224.3,45.1,SA 2'
我做了一個 list.split(delimiter=',') 並且只想擁有用於未來計算的數據點。
查看是否可以將字符串強制轉換為float
的最佳方法可能是try
進行強制轉換。
res = []
for x in lst:
try:
res.append(float(x))
except ValueError:
pass
之后, res
為[-224.3, 45.1]
你也可以將這個列表理解,像[float(x) for x in lst if is_float(x)]
,但對於這一點,你需要一個功能is_float
,將基本上做同樣的事情:嘗試將它轉換為浮動並返回 True,否則返回 False。 如果您只需要一次,循環會更短。
您可以嘗試以下操作 -
def isNum(s):
try:
float(s)
return True
except ValueError:
return False
lst = ['hello', '2U:', '-224.3', '45.1', 'SA 2']
bools = list(map(lst,isNum))
deleted = 0
for idx, val in enumerate(bools):
if val:
continue
else:
del lst[idx-deleted]
deleted = deleted + 1
編輯:
或者你可以使用
def isNum(s):
try:
float(s)
return True
except ValueError:
return False
lst = ['hello', '2U:', '-224.3', '45.1', 'SA 2']
lst = list(filter(isNum, lst))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.