如何从列表中的列表中删除包含非数字值的单元格

时间:2015-08-17 11:34:46

标签: python list

我有一个列表,其中包含包含数字和文本的子列表。 我想完全删除文本。

所以列表是这样的:

sample_list = [['hello','there'],['1','2.0','3'],['564','text','65.976']]

我一直在尝试的是

list_without_text = [[item for item in sublist] for sublist in sample_list if item.isdigit()==True ]

但是我得到NameError:名字'item'没有定义。

有什么想法吗?

编辑:列表中的所有项目都是字符串,有些仍然带有数字,字母和/或小数点。

2 个答案:

答案 0 :(得分:3)

你错了,item.isdigit() if条件应该在子列表理解中。示例 -

list_without_text = [[item for item in sublist  if item.isdigit()==True] for sublist in sample_list]

但是这只会有效,如果所有元素都是字符串,并且你想删除不是整数的字符串/浮点数。这不包括2.0等数字。

为此你可以使用像 -

这样的功能
def isnum(s):
    try:
        float(s)
        return True
    except ValueError:
        return False

list_without_text = [[item for item in sublist  if isnum(item) ] for sublist in sample_list]

示例/演示 -

>>> l = [["Hello","1"],["2.0","Bye"]]
>>> def isnum(s):
...     try:
...         float(s)
...         return True
...     except ValueError:
...         return False
...
>>> list_without_text = [[item for item in sublist  if isnum(item) ] for sublist in l]
>>> list_without_text
[['1'], ['2.0']]

答案 1 :(得分:2)

<强>代码:

lst= [["hello","there",],[1,2.0,3],[564,"text",65.976]]

[[ b for b in i if not isinstance(b, basestring)]for i in lst]

<强>输出:

[[], [1, 2.0, 3], [564, 65.976]]

如果您的列表中包含strings

<强>代码:

lst= [["hello","there",],["1","2.0","3"],["564","text","65.976"]]

[[ b for b in i if not b.isalpha()]for i in lst]

<强>输出:

[[], ['1', '2.0', '3'], ['564', '65.976']]