【问题标题】:Python: merge nested listsPython:合并嵌套列表
【发布时间】:2011-10-18 11:30:08
【问题描述】:

这里是python的初学者。

我有 2 个要合并的嵌套列表:

list1 = ['a',
         (b, c),
         (d, e),
         (f, g, h) ]

list2 = [(p,q),
         (r, s),
         (t),
         (u, v, w) ]

我正在寻找的输出是:

list3 = [(a, p, q),
         (b, c, r, s),
         (d, e, t),
         (f, g, h, u, v, w) ]

这可以在没有任何外部库的情况下完成吗? 注意:len(list1) = len(list2)

【问题讨论】:

  • 这里是python的初学者。 - 这意味着你应该阅读tutorial。
  • 嗨。我已经阅读了tuts。我知道如何合并简单的列表。但不知道如何处理嵌套列表。
  • 另外,list1 的第一个元素在您的示例中是一个字符串,但在合并后它似乎是一个对象。
  • ... 如果a == 'a' 则有效,但其余部分没有任何意义。 (t) 不是元组,顺便说一句。 -1.

标签: python merge nested-lists


【解决方案1】:

使用zip 函数和list comprehensions 的强大功能:

list1 = [('a', ),
        ('b', 'c'),
        ('d', 'e'),
        ('f', 'g', 'h') ]

list2 = [('p', 'q'),
        ('r', 's'),
        ('t', ),
        ('u', 'v', 'w') ]

print [a + b for a, b in zip(list1, list2)]

【讨论】:

    【解决方案2】:
    from operator import add
    list3 = map(add, list1, list2)
    

    【讨论】:

    • 或者,如果你想避免导入,map(tuple.__add__, ...)。 (+1 表示不坚持 map() 更具可读性的列表理解。)
    【解决方案3】:

    如果内部列表/元组中的顺序不重要,您可以使用数学集合操作。

    print [tuple(set(a)|set(b)) for a,b in zip(x,y)]

    set(a)|set(b) 将可迭代的 a 和 b 转换为集合,并取两个集合的并集。然后根据输出格式的需要将它们转换回元组。

    由于您是 python 的初学者,强烈建议您掌握列表推导。它过于强大和简洁。除了使您的代码更“pythonic”之外,列表推导式还可以作为“map”和“filter”函数的更友好的替代品。

    【讨论】:

      【解决方案4】:

      简单的一个

      list_3 = []
      list_3.extend(list_1 + list_2)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-31
        • 2023-02-22
        • 1970-01-01
        • 2018-03-25
        • 2011-09-27
        • 1970-01-01
        相关资源
        最近更新 更多