【问题标题】:Distributing a String over a tuple在元组上分配字符串
【发布时间】:2013-11-15 15:41:11
【问题描述】:

所以我试图在一个元组上分配一个字符串。 例如:

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")]))

最终编辑: 为我的第二个示例编辑了 Oscars 代码:

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]]

感谢您的帮助!

【问题讨论】:

  • 听起来像是递归的工作。
  • 听起来像是一个关于递归的家庭作业问题
  • 这很酷。你有什么问题?
  • 注意:True if isinstance(o, tuple) else False 完全等同于简单的isinstance(o, tuple)。此外,+1 以改进您针对 cme​​ts 的问题。

标签: python string list recursion tuples


【解决方案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']

【讨论】:

  • Downvoter:我的代码现在适用于这两个示例(第二个是后来添加的,在我的第一个答案之后)。是否愿意重新考虑否决票?
  • @hcwhsa 我明白了。第二个示例是在我的第一个答案之后添加的,我更新了我的答案以将其考虑在内。
  • @user2954175 如果这个答案对你有帮助,请不要忘记点击左侧的复选标记accept ;)
猜你喜欢
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 2010-10-09
相关资源
最近更新 更多