有没有一种好的、简洁的/内置的方法来查看iterable中的所有值是否都是零?现在我正在使用all()
来理解一点列表,但是(对我来说)似乎应该有一种更具表现力的方法。我认为这在某种程度上等同于C中的memcmp()
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中吗?我只是瞎了眼,还是应该坚持我原来的版本?
我不是说allcmp()
就是解决办法。这是一个我认为更有意义的例子。在这里,我不建议为Python提供新的内置组件。
在我看来,all()
不是那么有意义。它不表示“所有”在检查什么。您可以假设all()
接受一个iterable,但它不表示函数在寻找什么(一个由bool
s组成的iterable,它测试所有函数的True
)。我要的是一些函数,比如myallcmp()
,它有两个参数:iterable和comparison值。我在问是否有一个内置函数做了类似于我的组合allcmp()
的事情。
由于我的C背景和我的组合函数的名称在这里是不相关的,所以我调用了我的allcmp()
。
如果您知道iterable只包含整数,那么您可以这样做:
在这种情况下使用生成器而不是列表:
编辑:
all
是标准的Python内置。如果你想成为一个高效的Python程序员,你应该知道其中一半以上的内容(http://docs.python.org/library/functions.html)。认为alltrue
比all
更好的名字,就像认为应该调用whiletrue
的Cwhile
。是主观的,但我认为大多数人更喜欢内置的较短的名字。这是因为你应该知道他们做了什么,你必须打他们很多。大多数Python程序员都会理解我在几秒钟内编写的代码。我可能会在我的女朋友身上测试这段代码(她是架构师,不是程序员,从未使用过Python),我想她会得到的。使用生成器比使用numpy要好,因为生成器有更优雅的语法。numpy可能更快,但您只会在少数情况下受益(我展示的生成器很快,只有当这段代码是程序的瓶颈时,您才会受益)。
您可能不希望Python有更多的描述。
这里是代码,如果你这样做的memcpm风格(我喜欢所有版本,但也许你会喜欢这个):
如果值是numpy数组,则可以编写
相关问题 更多 >
编程相关推荐