isdigit 未通过对表示为字符串的浮点数的检查。
isdigit的帮助指定:
Return True if all characters in S are digits
and there is at least one character in S, False otherwise.
因此,您的工作将是寻找其他方法来确定某事实际上是否通过了“数字”检查。
您可以做的是将每个项目转换为浮点数的尝试包装在 try/except 中,然后将属于例外的每个项目附加到一个新列表中:
def remove_numbers(li):
numberless = []
for i in li:
try:
float(i)
except:
numberless.append(i)
return numberless
res = remove_numbers(["word",'2.134123'])
print(res)
# outputs ['word']
另一种方法是修改函数以根据float 测试简单地返回True 或False,并利用filter 根据@987654330 的结果“过滤”列表@ 方法。 (感谢@Pynchia)
def not_a_float(s):
try:
float(s)
return False
except:
return True
res = filter(not_a_float, ["word", '2.134123'])
在性能方面,两者之间并没有真正的优势,可能是因为filter的实现中的增益被调用not_a_float中的额外帧设置所消耗
python3 -mtimeit -s'from remove_floats import remove_numbers_loop; from random import randint' -s'l=[str(i) if randint(0,100)< 20 else "abc"+str(i) for i in range(1000000)]' -s 'remove_numbers_loop(l)'
python3 -mtimeit -s'from remove_floats import remove_numbers_filter; from random import randint' -s'l=[str(i) if randint(0,100)< 20 else "abc"+str(i) for i in range(1000000)]' -s 'remove_numbers_filter(l)'
100000000 loops, best of 3: 0.00929 usec per loop
100000000 loops, best of 3: 0.0107 usec per loop