所以我试图在一个元组上分配一个字符串.
例如:
x = ["a", ("b", ("c", "d"))]
然后,我想拥有
x = ["a", ("bc", "bd")]
然后最后:
x = ["abc", "abd"]
但是,元组并不一定总是第二个元素:
例如:
x = [(("c", "d"), "b"), "a"]
将简化为:
x = [("cb", "db"), "a"]
最后:
x = ["cba", "dba"]
我想知道如何编写一个函数以将第一个表达式直接简化为最后一个表达式.
到目前为止,我尝试过的是:
def distribute(x):
if isinstance(x, list) and any([True if isinstance(o, tuple) else False for o in x]):
if isinstance(x[0], tuple):
return (x[0][0] + x[1], x[0][1] + x[1])
else:
return (x[0] + x[1][0], x[0] + x[1][1])
print (distribute(["a", ("b", "c")]))
最终编辑:
经过编辑的奥斯卡代码可用于第二个示例:
def dist(tpl):
if not isinstance(tpl[1], tuple) and not isinstance(tpl[0], tuple):
return tpl
if isinstance(tpl[1], tuple):
ret = dist(tpl[1])
return [tpl[0] + ret[0], tpl[0] + ret[1]]
elif isinstance(tpl[0], tuple):
ret = dist(tpl[0])
return [ret[0] + tpl[1], ret[1] + tpl[1]]
谢谢您的帮助!
解决方法:
尝试一下,这是一个递归解决方案,适用于问题中的两个示例,并且假定元组中的两个元素永远不会同时成为元组.
def dist(tpl):
if not isinstance(tpl[0], tuple) and not isinstance(tpl[1], tuple):
return tpl
elif isinstance(tpl[0], tuple):
ret = dist(tpl[0])
return [ret[0] + tpl[1], ret[1] + tpl[1]]
else:
ret = dist(tpl[1])
return [tpl[0] + ret[0], tpl[0] + ret[1]]
它按预期工作:
dist(["a", ("b", ("c", "d"))])
=> ['abc', 'abd']
dist([(("c", "d"), "b"), "a"])
=> ['cba', 'dba']