Thi*_*nId 1 python algorithm comparison types
我正在编写一个程序,我必须测试列表中的元素是否属于某种类型.列表(z,见下文)可以变大,我可以测试标准方式:
for l in z:
typeL = type(l)
if typeL == complex or typeL == float:
#evaluate suite
elif typeL == list:
#evaluate different suite
Run Code Online (Sandbox Code Playgroud)
或者,我可以执行以下操作:
for l in z:
lTemp = l*0
if lTemp == 0:
#evaluate suite
elif lTemp == []:
#evaluate different suite
Run Code Online (Sandbox Code Playgroud)
我的问题是,哪种方法更快,更有效或更受欢迎?感谢所有提前.
Odo*_*ois 12
因此,如果您想比较类型,您应该获取类型并进行比较.更清晰的方法是使用isinstance method接受类型元组参数的方法.所以你的代码可能如下所示:
for l in z:
if isinstance(l,(complex,float)):
#evaluate suite
elif isinstance(l,list):
#evaluate different suite
Run Code Online (Sandbox Code Playgroud)
同样isinstance与ABC元类兼容,因此您可以在选择中更直接和清晰:
from numbers import Number
from collections import Iterable
for l in z:
if isinstance(l,Number):
#evaluate suite
elif isinstance(l,Iterable):
#evaluate different suite
Run Code Online (Sandbox Code Playgroud)
UPD:回答关于性能的评论中的一个问题,你应该记住,过早的优化是所有邪恶的根源.当你的程序工作时,你可以分析它并找到性能实际下降的位置.接下来你可以在python中优化它,在cython或C中重写,可以使用另一个实现,等等.但是当你在python中编码时,你必须尊重python代码更好的东西.