递归和工厂问题

2024-10-04 09:27:57 发布

您现在位置:Python中文网/ 问答频道 /正文

如何更改我的代码以在更改后返回LLL?你知道吗

我有一个清单:

LLL = [12,[3,[5],[6,[[7, [],8], []]]], [8, [0,87,23,434,444,33]]]

我把这个函数叫做:

def testQ1():
dolist_deep_add1 = factory_dolist_deep_A( (lambda x: x + 1) )
print ('dolist_deep_add1(LLL) : ', dolist_deep_add1(LLL))

此函数应在更改后返回列表。 我期待的结果是:

LLL = [13,[4,[6],[7,[[8, [],9], []]]], [9, [1,88,24,435,445,34]]] 

工厂代码:

def factory_dolist_wide_A( fa ):
 def print_wide (L):

    def pw1(x):
        if type(x) is int:
         x = fa(x)
        print(str(x)+' ', end='')

    def pwstart (L, lvl):
        print('\nlevel ' + str(lvl) + " : " , end='')
        pw      (L, lvl)

    def pw (L, lvl):
        if not L: return
        Q = []
        for a in L:
            if type(a) is list:
                if a == [] : pw1('[]')
                else: Q.extend(a)
            else:
                pw1(a)
        pwstart( Q , lvl + 1)

    return pwstart(L, 0)
return print_wide

目前,它只是获取数字并打印出来,而不改变列表本身。你知道吗

我想更改factory_dolist_wide_A( fa ):这样它将返回一个更改过的列表。你知道吗

它的工作方式应该与这个print函数相同,不仅要打印更改,还要在列表本身中进行更改。你知道吗


Tags: 函数列表iffactorydeffaprintdeep
1条回答
网友
1楼 · 发布于 2024-10-04 09:27:57

你的代码有很多不必要的函数定义。print_wide(L)定义为pwstart(L, 0)pwstart(L, lvl)定义为pw(L,lvl)。你知道吗

我将所有这些定义折叠成print_wide。我还将pw1()更改为modify()。你知道吗

此外,现有代码有一个严重错误。因为Q.extend(a)完全没有任何意义,所以我删除了它。你知道吗

因此,下面的代码遍历整个数组,并生成您要求的结果,但它不会打印原始代码本来应该打印的内容。你知道吗

def factory_dolist_wide_A( fa ):
    def print_wide (L, lvl=0):
        def modify(x):
            if type(x) is int:
                x = fa(x)
                print(str(x) + ' ', end='')
            else:
                print('[] ', end='')
            return x

        print('\nlevel ' + str(lvl) + " : " , end='')

        newList = []
        for a in L:
            if type(a) is list:
                newList.append(print_wide(a, lvl+1))
            else:
                newList.append(modify(a))
        return newList
    return print_wide

LLL = [12,[3,[5],[6,[[7, [],8], []]]], [8, [0,87,23,434,444,33]]]

def testQ1():
    dolist_deep_add1 = factory_dolist_wide_A( (lambda x: x + 1) )
    x = dolist_deep_add1(LLL)
    print()
    print('dolist_deep_add1(LLL) : ', x)

testQ1()

相关问题 更多 >