如何从列表中删除包含字母的字符串?

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=',') 并希望只有数据点用于未来的计算。

你可以试试下面的方法 -

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))

查看字符串是否可以转换为 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同样的事情:尝试将其转换为 float 和 return True,否则 return False。如果你只需要一次,循环会更短。