簡體   English   中英

如何從列表中刪除包含字母的字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM