是否有一种好的,简洁的/内置的方式来查看迭代中的所有值是否为零?现在我正在使用all()
一个小列表理解,但(对我来说)似乎应该有一个更具表现力的方法.我认为这有点等同memcmp()
于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'
Run Code Online (Sandbox Code Playgroud)
我希望内置函数可以执行以下操作:
def allcmp(iter, value) :
for item in iter :
if item != value :
return False
return True
Run Code Online (Sandbox Code Playgroud)
这个函数是否存在于python中,我只是盲目的,或者我应该坚持使用我的原始版本?
我不是说这allcmp()
是解决方案.这是我认为可能更有意义的一个例子.这不是我建议Python的新内置插件的地方.
在我看来,all()
这不是那么有意义.它没有表达"所有"正在检查的内容.你可以假设它all()
采用了一个可迭代的,但它没有表达函数正在寻找的东西(一个可迭代的bool
s测试所有它们True
).我要求的是像 my allcmp()
这样的函数,它有两个参数:一个可迭代的和一个比较值.我在问是否有内置函数可以执行与我编写的类似的操作allcmp()
.
我打电话给我的allcmp()
是因为我的C背景memcmp()
,我的编造功能的名称在这里无关紧要.
Tom*_*cki 59
在这种情况下使用生成器而不是列表:
all(v == 0 for v in values)
Run Code Online (Sandbox Code Playgroud)
编辑:
all
是标准的Python内置.如果你想成为高效的Python程序员,你应该知道它们中的一半以上(http://docs.python.org/library/functions.html).争论这alltrue
是更好的名称,而不是all
争论C while
应该被调用whiletrue
.是主观的,但我认为大多数人更喜欢内置插件的短名称.这是因为你应该知道他们做了什么,你必须经常输入它们.
大多数Python程序员都会理解我在几秒钟内编写的代码.我可能会在我的girlfried上测试这段代码(她是架构师,不是程序员,从不使用Python),我想她会得到它.使用生成器比使用numpy更好,因为生成器具有更优雅的语法.numpy可能会更快,但你只会在极少数情况下受益(像我所展示的生成器很快,只有当你的程序中存在瓶颈时才会受益).
你可能不会指望没有更多来自Python的描述.
PS.这是代码,如果你这样做的memcpm风格(我喜欢所有版本更多,但也许你会喜欢这个):
list(l) == [0] * len(l)
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 12
如果您知道iterable只包含整数,那么您可以这样做:
if not any(values):
# etc...
Run Code Online (Sandbox Code Playgroud)
any() 函数可能是实现这一目标的最简单易行的方法。如果可迭代对象为空,例如所有元素都为零,它将返回 False。
values = (0, 0, 0, 0, 0)
print (any(values)) # return False
Run Code Online (Sandbox Code Playgroud)
如果值是一个numpy数组,则可以编写
import numpy as np
values = np.array((0, 0, 0, 0, 0))
all(values == 0)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
48034 次 |
最近记录: |