在Ruby中,我习惯使用Enumerable#inject来查看列表或其他结构,并回过头来了解一下。例如,
[1,3,5,7].inject(true) {|allOdd, n| allOdd && n % 2 == 1}
确定数组中的每个元素是否都是奇数。在Python中完成同样的事情的适当方法是什么?
答案 0 :(得分:24)
要确定每个元素是否都是奇数,我会使用all()
def is_odd(x):
return x%2==1
result = all(is_odd(x) for x in [1,3,5,7])
但是,一般情况下,Ruby的inject
最像Python的reduce()
:
result = reduce(lambda x,y: x and y%2==1, [1,3,5,7], True)
在这种情况下, all()
是首选,因为一旦找到类似False
的值,它就能够转义循环,而reduce
解决方案则必须处理整个列表回答。
答案 1 :(得分:7)
听起来像Python中的reduce
或来自Haskell的fold(r|l)'?'
。
reduce(lambda x, y: x and y % == 1, [1, 3, 5])
答案 2 :(得分:4)
我认为你可能想要使用all
,这不如inject
。 reduce
是等效于inject
的Python。
all(n % 2 == 1 for n in [1, 3, 5, 7])