情况如下:
我有一个列表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
。为什么???