函数返回无。为什么?

时间:2016-09-23 12:31:31

标签: python

情况如下:

我有一个列表my_list,我希望将其转换为元组列表,其中每个元组包含(n, 2n)对。例如:

:[4,2,2,1,2,8,4,4]

Out :[(1,2),(2,4),(2,4),(4,8)]

  

这不像做result = [(x, 2*x) for x in my_list if 2 * x in my_list]那么容易。对于[1, 2, 2, 2, 4]的输入,简单的事情会失败,因为它会返回[(1, 2), (2, 4), (2, 4), (2, 4)],而正确的结果将是[(1, 2), (2, 4)] !!

我为该任务编写了一个递归函数,如下所示:

my_list = [1, 2, 2, 4, 2, 4, 4, 8]


def rec_pair_finder(lst, pairs=list(), itercount=0):
    itercount += 1
    temp = lst[:]
    print('Start of iteration {}\nVariable Status:\n\t->List: {}\n\t->Pairs: {}'.format(itercount, temp, pairs))
    if temp:
        a = temp[0]
        b = 2 * a
        if b in temp:
            pairs.append((temp.pop(temp.index(a)), temp.pop(temp.index(b))))
            rec_pair_finder(temp, pairs=pairs, itercount=itercount)
    else:
        return pairs

print(rec_pair_finder(my_list))

运行上面的代码会产生以下结果:

Start of iteration 1
Variable Status:
    ->List: [1, 2, 2, 4, 2, 4, 4, 8]
    ->Pairs: []
Start of iteration 2
Variable Status:
    ->List: [2, 4, 2, 4, 4, 8]
    ->Pairs: [(1, 2)]
Start of iteration 3
Variable Status:
    ->List: [2, 4, 4, 8]
    ->Pairs: [(1, 2), (2, 4)]
Start of iteration 4
Variable Status:
    ->List: [4, 8]
   ->Pairs: [(1, 2), (2, 4), (2, 4)]
Start of iteration 5
Variable Status:
    ->List: []
    ->Pairs: [(1, 2), (2, 4), (2, 4), (4, 8)]
None  # Why None?

正如可以看到的那样,它一直在工作,直到结束,但即使pairs是正确的,也会返回None。为什么???

0 个答案:

没有答案