我有一个列表,其中包含包含数字和文本的子列表。 我想完全删除文本。
所以列表是这样的:
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'没有定义。
有什么想法吗?
编辑:列表中的所有项目都是字符串,有些仍然带有数字,字母和/或小数点。
答案 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']]