相关疑难解决方法(0)

在字典中递归地查找密钥

我正在尝试编写一个非常简单的函数来递归搜索可能嵌套的(在最极端情况下十层深度)Python字典并返回它从给定键中找到的第一个值.

我无法理解为什么我的代码不适用于嵌套字典.

def _finditem(obj, key):
    if key in obj: return obj[key]
    for k, v in obj.items():
        if isinstance(v,dict):
            _finditem(v, key)

print _finditem({"B":{"A":2}},"A")
Run Code Online (Sandbox Code Playgroud)

它回来了None.

然而,它确实可以用于_finditem({"B":1,"A":2},"A")返回2.

我确定这是一个简单的错误,但我找不到它.我觉得在标准库中已经有可能存在这样的东西了collections,但我也找不到.

python recursion search dictionary

26
推荐指数
3
解决办法
4万
查看次数

在中途停止Reduce()操作.做部分运行总和的功能方式

我一直在做一些函数式编程并且有一个问题.也许我可能会遗漏一些东西,但有没有办法在中途停止"减少()"功能?让我说当我达到一定条件?这个想法似乎有点反功能.我没有在python或F#中看到任何这样的选项,

举个例子,假设我有一个列表,如[1,2,3,4,5].我想总结这个列表中的元素,直到总和不大于某个数字(比方说8),并以某种方式返回/标记/存储/识别我实际添加的元素数量.

如果我们以python为例,我可能会尝试类似的东西

reduce(lambda a,b : a if a + b > 8 else a + b, input)
Run Code Online (Sandbox Code Playgroud)

这给了我正确答案6,但我怎么发现我已经添加了3个元素来到这里.没有这样的反击.我不能在lambdas里面做任务.我认为F#具有相同的情况.

我知道我可以使用for循环或使用可以存储状态等的函数.但是这样做的功能方式是什么.Reduce()想要一直运行到最后,但是在这个处理线的某个地方,我们要么想要停止它(因为我们不关心处理其余的元素)或至少记下我们所在的地方停止关怀.

python f# functional-programming

18
推荐指数
4
解决办法
3371
查看次数

使用itertools进行递归函数应用

我需要一个Python函数iterate(f, x),它创建一个迭代器,返回值x,f(x),f(f(x)),f(f(f(x)))等(例如,Clojure的iterate).首先,我想知道:这是否已经存在于标准库的某个地方,我只是错过了它?当然,使用生成器实现起来很容易:

def iterate(f, x):
    while True:
        yield x
        x = f(x)
Run Code Online (Sandbox Code Playgroud)

只是出于好奇:在Python中有没有更多功能性的方法来实现这一点,例如使用一些itertools或functools魔术?

在Python 3.3中,这可行

def iterate(f, x):
    return accumulate(repeat(x), lambda acc, _ : f(acc))
Run Code Online (Sandbox Code Playgroud)

但看起来像是对我的虐待.我可以更好地做到这一点吗?

python iterator functional-programming generator python-itertools

6
推荐指数
1
解决办法
1033
查看次数

是否可以使用python中的元组索引嵌套列表?

我刚开始使用python,很快就想知道是否可以使用元组索引嵌套列表.就像是:elements[(1,1)]

我想要做的一个例子类似于下面的代码,我在其中保存矩阵的一些位置,我稍后需要在一个名为index的元组中访问它.

index = ( (0,0), (0,2), (2,0), (2,2) )

elements = [ [ 'a', 'b', 'c'],
             [ 'c', 'd', 'e'],
             [ 'f', 'g', 'h'] ]

for i in index:
    print (elements [ i[0] ] [ i[1] ])

    # I would like to do this:
    # print(elements[i])
Run Code Online (Sandbox Code Playgroud)

这似乎是一个有用的功能.这有什么办法吗?或者也许是一个简单的选择

python tuples nested-lists

5
推荐指数
2
解决办法
719
查看次数