【发布时间】:2019-02-10 20:18:48
【问题描述】:
是否可以编写一个递归函数,将元组列表、键和值作为参数传递,然后如果键存在 -> 设置键和值,如果不存在,则在列表末尾添加新的键和值?
参数必须是元组,我不能将其更改为字典等以满足要求!
到目前为止,我想出的代码看起来像这样,我知道它真的很乱:
def change(tupl, k, v):
if len(tupl) == 0:
return ((k, v),)
if len(tupl) == 1:
if k == tupl[0][0]:
return ((k, v),)
else:
return (tupl[0],) + ((k, v),)
elif k == tupl[0][0]:
return ((k,v),) + change(tupl[1:], k, v)
else:
return (tupl[0],) + change(tupl[1:], k, v)
这个元组列表将作为参数传递:
tupl = (('n', 7), ('c', 1), ('k', 13), ('z', 9))
我想要的两个结果是:
print(change(tupl,'n', 111))
(('n', 111), ('c', 1), ('k', 13), ('z', 9))
我知道解决这个问题的方法,但是我的递归也必须能够做到这一点:
print(change(tupl,'m', 1))
(('n', 7), ('c', 1), ('k', 13), ('z', 9), ('m', 1))
问题是如果它的
打印(更改(tupl,'n', 111))
它将返回在列表末尾带有不必要的 ('n', 111) 的元组列表。
如果 k 和 v 存在于 tupl 中,则返回更新了键和值的元组列表。如果传递的 tupl 中不存在 k 和 v,则始终添加在末尾。
我可以做到这两种解决方案中的任何一种,但无法弄清楚如何编写可以同时做到这两种解决方案的递归。
解决这个问题的最佳方法是什么?任何建议将不胜感激!
【问题讨论】:
-
函数是否必须是递归的?,是否有多个元组的键需要更改其值 - 或者它可以在找到它时停止?
-
是的,它必须是递归的,并且传入的键和值总是一个!
-
print(change(tuple,'n', 111))导致TypeError你的意思是print(change(tupl,'n', 111))吗? -
抱歉是tupl,已编辑!
-
这是作业题吗?