这是 Python 2.7 的实现问题
假设我有一个名为 的整数列表nums
,我需要检查中的所有值是否都nums
为零。nums
包含许多元素(即超过 10000 个),具有许多重复值。
使用all()
:
if all(n == 0 for n in set(nums)): # I assume this conversion from list to set helps?
# do something
使用集合减法:
if set(nums) - {0} == set([]):
# do something
编辑:执行上述方法的更好方法,由用户 U9-Forward 提供
if set(nums) == {0}:
# do something
每种方法的时间和空间复杂性如何比较?有没有更有效的方法来检查这个?
注意:对于这种情况,我试图避免使用 numpy/pandas。
任何集合转换nums
都无济于事,因为它会迭代整个列表:
if all(n == 0 for n in nums):
# ...
很好,因为它在第一个非零元素处停止,不考虑余数。
渐近地,所有这些方法都与随机数据呈线性关系。实现细节(在生成器上没有重复的函数调用)使not any(nums)
速度更快,但这依赖于不存在任何其他虚假元素0
,例如''
或None
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句