[英]List of tuples recursion, return updated version?
是否可以編寫將元組,鍵和值的列表作為參數傳遞的遞歸函數,然后如果鍵存在->設置鍵和值,如果不存在,則在列表末尾添加新的鍵和值?
參數必須是元組,我無法將其更改為字典等要求!
到目前為止,我想到了這樣的代碼,我知道它確實很亂:
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))
問題是,如果它
打印(change(tupl,'n',111))
它將返回元組列表,並在列表末尾添加不必要的('n',111)。
簡單地說,如果k和v存在於tupl中,則返回已更新鍵和值的元組列表。 如果在傳遞的tupl中不存在k和v,則總是在末尾添加。
我可以使用這兩種解決方案中的任何一種,但無法找出編寫可以同時實現兩者的遞歸的方法。
解決此問題的最佳方法是什么? 任何建議將不勝感激!
您可以刪除某些檢查,因為它們是多余的或推斷的:
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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.