当前位置: 首页 > 知识库问答 >
问题:

如何在保持列表层次结构的同时连接嵌套列表中的字符串?

越伯寅
2023-03-14

我有这张单子:

["a", "b", ["c", ["d", "e"], "f"]]

我希望将每个列表中的字符串元素连接在一起,同时保持列表结构。

预期的行为如下所示:

>>> test_list = ["a", "b", ["c", ["d", "e"], "f"]]
>>> function(test_list)
["ab", ["c", ["de"], "f"]]

它将与此非常相似,但它必须能够处理任意数量的嵌套列表。

我试图用一个递归函数来解决它,但没有得到预期的结果。

有什么提示吗?

共有2个答案

淳于开畅
2023-03-14

使用递归,您可以通过以下方式实现

l = ["a", "b", ["c", ["d", "e"], "f"]]


def func(s):
    res = []
    tmp = []
    val = None
    for i in s:
        if type(i)==str:
            tmp.append(i)
        else:
            res.append(''.join(tmp))
            tmp = []
            val = nested2str(i)
            res.append(val)
    if tmp!=[]:
        res.append(''.join(tmp))
    return res

result = func(l)
print(result)

输出

['ab', ['c', ['de'], 'f']]
祁嘉言
2023-03-14

可以将itertools.groupby递归一起使用:

from itertools import groupby as gb
d = ["a", "b", ["c", ["d", "e"], "f"]]
def combine(d1):
  return [i for a, b in gb(d1, key=lambda x:isinstance(x, str)) 
          for i in ([''.join(b)] if a else [combine(k) for k in b])]

print(combine(d))

输出:

['ab', ['c', ['de'], 'f']]
 类似资料:
  • 问题内容: 我想在Redis中维护一些元数据。 它按预期工作。 现在,我想在此meta_data结构中保留一个列表,并能够将元素添加到列表中。 例如: 但这立即引发异常: 我认为我可以创建一个新密钥并用于维护列表。但是我想尽量减少密钥的数量。这是因为用户注销后,我需要快速使密钥失效。将密钥保持在最低限度可以帮助我 1)快速移出按键 2)避免出现错误,因为用于保持制表符的键较少 有什么办法可以使列表

  • 问题内容: 使用MSSQL 2008和XQUERY 考虑以下存储在表中的XML: 我想将此xml分解为类似 等等。 注意:在此示例中,每个ParentElement可能有许多ChildElements。我一直在尝试使用xquery,但是我无法像这样浏览复杂的元素。 基本上,我正尝试与FOR XML对表进行完全相反的操作,只是要使用一组更为简单的数据。 关于下一步或如何实现此目标的任何想法? 谢谢

  • 据我解释,可以用任何表示,其中是或的超级类。同样的逻辑适用于也是。那么是?

  • 问题内容: 假设我有一个表示某些嵌套列表的字符串,我想将其转换为真实的东西。我认为可以做到这一点: 但是在用户可能提供字符串来执行的环境中,这可能是/将不是一个好主意。是否有人对完成相同任务的整洁解析器有任何想法? 问题答案: import ast >>> mylist = ast.literal_eval(“[‘foo’, [‘cat’, [‘ant’, ‘bee’], ‘dog’], ‘bar

  • 问题内容: 一个作业有一个真正的问题(和头痛)… 我在入门编程班上,我必须写一个函数,给定一个列表,该函数将返回其达到的“最大”深度。例如:[1,2,3]将返回1,[ 1,[2,3]]将返回2 … 我已经编写了这段代码(这是我能得到的最好的T_T) 但是,它显然不像应有的那样工作,因为如果存在不计入最大深度的列表,它仍然会增加计数器… 例如:当我将函数与[1,2,[3,4],5,[6],7]一起使

  • 如何使用MapStruct映射嵌套列表? 下面是我的实体类: 我想把它映射到: 现在,我的映射器看起来像: 但它只映射“普通”属性,如Long、intger等,但它避免了嵌套列表。