有没有一种好的、简洁/内置的方法来查看可迭代中的所有值是否为零?现在我正在使用all()
有一点列表理解,但是(对我来说)似乎应该有一种更具表现力的方法。我认为这在某种程度上相当于memcmp()
in C.
values = (0, 0, 0, 0, 0)
# Test if all items in values tuple are zero
if all([ v == 0 for v in values ]) :
print 'indeed they are'
我希望有一个内置函数可以执行以下操作:
def allcmp(iter, value) :
for item in iter :
if item != value :
return False
return True
python 中是否存在该函数而我只是盲目的,或者我应该坚持使用原始版本?
Update
我并不是建议这样做allcmp()
是解决方案。这是我的一个例子think可能更有意义。这不是我建议新的 Python 内置函数的地方。
在我看来,all()
是不是很有意义。它没有表达“全部”正在检查的内容。你可以假设all()
接受一个可迭代对象,但它并没有表达该函数正在寻找什么(一个可迭代对象bool
测试所有这些True
)。我要求的是一些函数像 my allcmp()
它需要两个参数:一个可迭代的值和一个比较值。我问是否有一个内置函数可以完成与我编写的类似的操作allcmp()
.
我打电话给我的allcmp()
因为我的 C 背景和memcmp()
, 我编写的函数的名称无关紧要 here.
在这种情况下使用生成器而不是列表:
all(v == 0 for v in values)
Edit:
all
是标准 Python 内置的。如果你想成为高效的 Python 程序员,你应该知道其中一半以上(http://docs.python.org/library/functions.html http://docs.python.org/library/functions.html)。争论说alltrue
比这个名字更好all
就像争论 Cwhile
应该打电话whiletrue
。是主观的,但我认为大多数人更喜欢内置函数的较短名称。这是因为无论如何你都应该知道它们是做什么的,而且你必须经常输入它们。
使用生成器比使用 numpy 更好,因为生成器具有更优雅的语法。 numpy 可能更快,但只有在极少数情况下您才会受益(像 shown 这样的生成器速度很快,只有当该代码是程序中的瓶颈时您才会受益)。
您可能无法期望 Python 提供更多描述性内容。
附言。如果您以 memcpm 风格执行此操作,则这里是代码(我更喜欢所有版本,但也许您会喜欢这个):
list(l) == [0] * len(l)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)