【问题标题】:Merging sublists in python [duplicate]在python中合并子列表[重复]
【发布时间】:2012-12-26 01:33:14
【问题描述】:

可能重复:
Flattening a shallow list in Python
Making a flat list out of list of lists in Python
Merge two lists in python?

快速简单的问题:

如何合并。

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

到这里:

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

【问题讨论】:

  • from functools import reduce a = [['a','b','c'],['d','e','f']] reduce(lambda x, y: x+y, a)
  • import itertools original_list = [[2,4,3],[1,5,6], [9], [7,9,0]] new_merged_list = list(itertools.chain(* original_list))

标签: python


【解决方案1】:

列表连接只是使用+ 运算符完成的。

所以

total = []
for i in [['a','b','c'],['d','e','f']]:
    total += i

print total

【讨论】:

  • 这是最好的解决方案,因为它是最简单的。 +1。但是,您可以简单地执行以下操作:new_list = old_list1 + old_list2。你的做同样的事情,但你不需要先把它们放在一个列表中。
  • 是的,我只是希望它适用于任意列表。从那以后,我了解到您可以执行类似sum([], [list1, list2, list3]) 的操作,并且由于 sum 调用 + 运算符,而 [] 是连接操作,它将为您加入所有操作。
【解决方案2】:

这样可以:

a = [['a','b','c'],['d','e','f']]
reduce(lambda x,y:x+y,a)

【讨论】:

  • 为什么?!这完全是多余的,为什么不直接做a = [['a','b','c'],['d','e','f']]a[0]+a[1]
  • 如果列表是 `[['a','b','c'],['d','e','f'],['d', 'e','f']] ?
  • 我同意你的答案更具可读性:),我只是给出了一个通用的答案。 :)
  • @AshwiniChaudhary - 我不明白这有什么关系 - 如果你将错误的参数传递给函数,你会得到一个错误的答案......
  • @Sibi 为什么不简单地使用itertools.chain(),它专为此目的而构建,与您的解决方案相比速度非常快。 stackoverflow.com/questions/406121/…
【解决方案3】:

试试:

sum([['a','b','c'], ['d','e','f']], [])

或者更长但更快:

[i for l in [['a', 'b', 'c'], ['d', 'e', 'f']] for i in l]

或者按照@AshwiniChaudhary 的建议使用itertools.chain

list(itertools.chain(*[['a', 'b', 'c'], ['d', 'e', 'f']]))

【讨论】:

  • sum() 不应用于此类事情。正如docs 所说:要连接一系列可迭代对象,请考虑使用 itertools.chain()。
【解决方案4】:
mergedlist = list_letters[0] + list_letters[1]

这假设你有一个静态长度的列表,并且你总是想合并前两个

>>> list_letters=[['a','b'],['c','d']]
>>> list_letters[0]+list_letters[1]
['a', 'b', 'c', 'd']

【讨论】:

    【解决方案5】:

    使用列表推导:

    ar = [['a','b','c'],['d','e','f']]
    concat_list = [j for i in ar for j in i]
    

    【讨论】:

    • 这是最快的方法,fwiw。在 CPU 周期方面。
    • 完全是最好的方式,因为它是最紧凑的。但它是如何工作的呢?
    • 我喜欢这个!我完全不明白!请有人解释一下。这真是令人兴奋。
    • 这是列表理解中的双重迭代。第一个forar 中的每个列表选为j,第二个forj 中的每个元素选为i
    • 太棒了!谁能告诉我如何在添加到 concat_list 之前对项目进行类型转换?
    【解决方案6】:

    尝试列表对象的“扩展”方法:

     >>> res = []
     >>> for list_to_extend in range(0, 10), range(10, 20):
             res.extend(list_to_extend)
     >>> res
     [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
    

    或更短:

    >>> res = []
    >>> map(res.extend, ([1, 2, 3], [4, 5, 6]))
    >>> res
    [1, 2, 3, 4, 5, 6]
    

    【讨论】:

      猜你喜欢
      • 2017-09-05
      • 2012-04-13
      • 1970-01-01
      • 2015-09-17
      • 2021-02-13
      • 1970-01-01
      • 2020-08-04
      • 2018-04-26
      • 2021-02-11
      相关资源
      最近更新 更多