是否可以编写一个将元组,键和值的列表作为参数传递的递归函数,然后如果键存在->设置键和值,如果没有,则在列表末尾添加新的键和值? / p>
参数必须为元组,我无法根据需要将其更改为字典等!
到目前为止,我想出的代码看起来像这样,我知道它真的很乱:
sample_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
splits = 4
def avgerage_splits(data):
datasum = 0
count = 0
for num in data:
datasum += num
count += 1
if count == splits:
yield datasum / splits
datasum = count = 0
if count:
yield datasum / count
print(list(average_splits(sample_list)))
[1.5, 3.5, 5.5, 7.5, 9.5, 11.0]
此元组列表将作为参数传递:
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,'n',111))
它将返回元组列表,并在列表末尾添加不必要的('n',111)。
如果k和v在tupl中存在,则返回具有键和值更新的元组列表。如果在传递的tupl中不存在k和v,则总是在末尾添加。
我可以使用这两种解决方案中的任何一种,但是无法找出编写可以同时实现两者的递归的方法。
解决这个问题的最佳方法是什么?任何建议将不胜感激!
答案 0 :(得分:1)
您可以删除一些多余或推断出的支票:
def change(tupl, k, v):
if len(tupl) == 0: # or just `if not tupl:`
return ((k, v),)
if k == tupl[0][0]:
return ((k, v),) + tupl[1:]
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))