python map和reduce中的嵌套lambda表达式

时间:2011-02-23 02:24:16

标签: python arrays map slice reduce

我的代码目前包含,作为while循环条件的一部分:

reduce(operator.or_, map(lambda y: reduce(operator.or_, map(lambda x: x[0] == y, data[testedoffset:])), footers))

它的目的是检查python array.array实例的给定切片是否包含几个特定字节值中的一个。

我得到的错误是:

NameError: global name 'y' is not defined

所以我很确定这是一个范围问题。但我想不出办法从我这里做我想做的事。

2 个答案:

答案 0 :(得分:3)

我看到你自己找到了答案,但是当你在这里时...... 该代码确实可以使用一些工作。

我不完全确定您为什么要在data[testedoffset:]序列上基于footers映射该表达式。除非你__getitem__有副作用,否则这似乎没有任何效果。

但整个map + reduce + operator.or_事情给了我一些意志。

尝试更像这样的事情:

y = 'whatever'
if any(x[0] == y for x in data[offset:]):
    print "yep, it's in there"

答案 1 :(得分:0)

这肯定不是一个范围问题,它显然是一个 unpythonic 表达式。 这是我尝试理解它,我发现你必须将y传递给lambda表达式。

reduce(operator.or_,
       map(lambda y: reduce(operator.or_, map(lambda x: x[0] == y, data[testedoffset:]))
                ,#Where is y
           , footers))
相关问题