首页 > 解决方案 > How to remove all nonnumber string characters from list?

问题描述

I have a list I want to remove all non numeric string values from.

list = ['$\\mathdefault{10}$', '$\\mathdefault{30}$', '$\\mathdefault{50}$']

would become:

newlist = [10,30,50]

I have tried:

>> [x for x in mylist if not isinstance(x, str)]
>> [x for x in mylist if isinstance(x, int)]
>> [x for x in mylist if isinstance(x, float)]

all return empty: [] presumably because even the numbers are strings.

How to achieve: [10,30,50] ?

标签: python

解决方案


newlist = [int(''.join(char for char in string if char.isdigit())) for string in mylist]

你实际上正在做一些事情,这就是为什么你最终会得到这个粗糙的 1-liner。列表中的每个项目都需要删除所有非数字字符。这就是char.isdigit()部分。然后需要将剩余的数字字符串字符连接在一起。这就是''.join(...)部分。然后需要将它们转换为 intint(...)部分。所有这些都包含在列表推导中,因此您最终得到了一个整数列表。

>> [x for x in mylist if not isinstance(x, str)]
>> [x for x in mylist if isinstance(x, int)]
>> [x for x in mylist if isinstance(x, float)]

这些都不起作用的原因是它们作用于列表中的整个字符串,而不是每个字符串中的字符。此外,即使它们是数字字符,它们仍然是字符串。所以isinstance()不会将它们与字母和其他字符分开。


推荐阅读