簡體   English   中英

元組遞歸列表,返回更新版本?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM