python - 递归函数打印结果但返回 None
问题描述
我写了一个函数来检查大约 10 000 个组合。预计会返回一些匹配项。在某些情况下确实如此。
有时我可以在函数内打印结果字符串但函数本身返回 None 对象并且我无法进一步使用它的问题
def find_variants(pairs_dict, a1, a2, counter = 1):
variants = pairs_dict['variants']
new_results = []
for key_start in pairs_dict['start_pairs']:
for key_end in pairs_dict['end_pairs']:
if key_start != key_end:
candidates = [(el1, el2) for el1, el2 in zip(a1, a2) if (el1, el2) != key_start \
and (el1, el2) != key_end]
new_variants = []
for c in candidates:
for variant in variants[key_start]:
option = variant + [c]
current_score = num_common_letters(''.join(el[0] for el in option),\
''.join(el[1] for el in option))
base_score = num_common_letters(''.join(el[0] for el in variant),\
''.join(el[1] for el in variant))
if current_score > base_score:
new_variants.append(option)
if ''.join(el[0] for el in option) == ''.join(el[1] for el in option):
return ''.join(el[0] for el in option)
elif ''.join(el[0] for el in option + [key_end]) == ''.join(el[1] for el in option + [key_end]):
new_results.append(''.join(el[0] for el in option + [key_end]))
else:
new_variants.append(variant)
pairs_dict['variants'][key_start] = new_variants
pairs_dict['results'].append(new_results)
counter += 1
if counter <= len(a1):
find_variants(pairs_dict, a1, a2, counter = counter)
else:
matches = list(filter(lambda x: len(x) > 0, flatten(pairs_dict['results'])))
if len(matches) > 0:
matches = sorted(matches, key=lambda x: (len(x), x[0]))
result = matches[0]
print(result)
return result
else:
return 'IMPOSSIBLE'
例如,此代码在底部打印“dearalanhowareyou”,但返回 None
print(result)
"dearalanhowareyou"
解决方案
推荐阅读
- mysql - 如何计算日期错误之间的时间?
- c# - 如何访问主类之外的 WPF 控件属性
- javascript - $ 不是 wordpress 5.3 更新后的功能
- android - SQLITE:显示三个表差异与两个条件之间的差异
- javascript - 有没有更好的方法在两个单独的元素上运行这个函数?
- jq - jq:错误:语法错误,意外的 INVALID_CHARACTER,期待 $end(Unix shell 引用问题?)在
,第 1 行: - javascript - 从区域中取消附加 JQuery 拖放项目而不删除或隐藏它
- flutter - Flutter 中的 main 函数和 runApp() 函数有什么区别?
- loops - 使用循环的多个matplotlib图表
- angular - 在 Angular 8 中跨多个组件重用方法的最佳实践