如果新元组不在嵌套元组中,如何递归地添加它?

2024-03-29 14:42:03 发布

您现在位置:Python中文网/ 问答频道 /正文

目前,我有一个嵌套元组:

t = (('b', 2), ('a', 1), ('c', 3))

我希望传入两个参数keyvalue,如果它们不在嵌套的元组中,那么像这样将其添加到元组(key, value),并返回新的元组。你知道吗

如果键在元组中,它将简单地替换它。你知道吗


例如

使用嵌套元组t我想传入key = dvalue = 4。因为,元组不在嵌套元组中,所以它将被添加到嵌套元组中。你知道吗

预期的输出是:(('b', 2), ('a', 1), ('c', 3), ('d', 4))

如果这个元组已经在嵌套的元组中,它将被替换。例如,如果我传入key = cvalue = 9到嵌套元组t

预期的输出是:(('b', 2), ('a', 1), ('c', 9))


到目前为止我所拥有的…

def add_new(t, key, value)
    if len(t) == 0:
        return (key, value)
    if key not in t[0][0] and value not in t[0][1]:
       return (key, value,) + add_new(t[0:], key, value)
    if key in t[0][0] and value in t[0][1]:
       return (key, value,) + add_new(t[1:], key, value)

add_new(t, "d", 4)
add_new(t, "c", 9)

Tags: andkeyinaddnew参数lenreturn
3条回答

我想你最好用dict,而不是元组。你知道吗

t = {
      'b': 2,
      'a': 1,
      'c': 3,
    }

然后,当您想添加另一个变量时,您可以使用

t['d'] = 4

此外,如果要替换已经存在的值,则使用

t['c'] = 9

这有几个好处。字典在添加、替换和删除值方面通常比元组或列表等索引数据结构快得多。它们也非常直观,不需要您定义任何自己的函数或方法来使用它们。有关python字典的更多信息,请参见here。你知道吗

可以使用生成器表达式创建一个仅包含所需值的新元组,然后添加新元组:

def add_new(t, key, value):
    return tuple(item for item in t if item[0] != key) + ((key, value),)

>> t = (('b', 2), ('a', 1), ('c', 3), ('d', 4))
>> add_new(t, 'c', 9)
(('b', 2), ('a', 1), ('d', 4), ('c', 9))

注意((key, value),)中的多余逗号。否则,它将是单个元组而不是嵌套元组。你知道吗

如果必须使用递归,那么可以将基本情况选择为空元组或第一个元素的键与key匹配的元组。在本例中,您将向最终结果追加一个更新的键。否则,通过保持第一个元素的原样并递归调用其余元素的add_new返回。你知道吗

这将产生以下功能:

def add_new(t, key, value):
    if len(t) == 0 or t[0][0] == key:
        return ((key, value),) + t[1:]
    return t[0:1] + add_new(t[1:], key, value) 

tup = (('b', 2), ('a', 1), ('c', 3))
print(add_new(tup, "d", 4))
print(add_new(tup, "c", 9))

输出

(('b', 2), ('a', 1), ('c', 3), ('d', 4))
(('b', 2), ('a', 1), ('c', 9))

相关问题 更多 >