在更大的数组python中连接所有数组

时间:2018-11-09 00:25:15

标签: python arrays

我有一个很大的数组,里面有很多子数组,并且正在尝试加入其中的所有子数组。我知道如何串联数组,但是由于内部数组的数量各不相同,因此我不知道要使一个函数串联这些数组。我知道我将需要一个或多个循环,但不确定如何执行。到目前为止,我一直在像这样手动进行操作,直到我到达最后一个索引为止:

ldata  = ldata[0]+ldata[1]+ldata[2]+ldata[3]+ldata[4]

其中ldata是更大的列表,所有索引都是内部列表。我该怎么做?

编辑:这是一个示例

a = [[1,2],[3,4],[5,6]]

4 个答案:

答案 0 :(得分:3)

您可以使用chain.from_iterable

BASIC_README

输出

from itertools import chain

a = [[0, 1], [2, 3], [4, 5], [6, 7]]
result = list(chain.from_iterable(a))

print(result)

答案 1 :(得分:1)

您可以抓住每个子列表并添加到新列表中。

new_ldata = []
for sublist in ldata:
    new_ldata += sublist

答案 2 :(得分:0)

如果您的列表不太长,请保持简单:

>>> a
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> sum(a, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]

我进行了一些计时测量:

>>> timeit.timeit('sum([[1,2,3],[4,5,6],[7,8,9]], [])')
6.547808872535825
>>> timeit.timeit('reduce(lambda a, c: a + c, [[1,2,3],[4,5,6],[7,8,9]], [])', setup="from functools import reduce")
10.435796303674579

列表越多,列表越长,使用chain的解决方案的效果会更好:

a = [list(range(20)) for x in range(30)]
def test_sum():    
    return sum(a, [])
def test_chain():
    return list(itertools.chain.from_iterable(a))
def test_add():     
    result = []
    for i in a:
        result += i
    return result
def test_list_comprehension():
    return [x for l in a for x in l]
print(timeit.timeit(test_sum), timeit.timeit(test_chain), timeit.timeit(test_add), timeit.timeit(test_list_comprehension))

收益

18.778313734044787 7.5882537689758465 2.5082976589910686 13.912770285038278

这表明用短函数将数组加起来也很好。

答案 3 :(得分:0)

您可以为此使用numpy串联

import numpy as np
x = [[1,1],[2,2,2],[3],[4,4,4,4]]
concated_x = np.concatenate(x) # now in numpy array form
concated_x = list(concated_x) # if you want it back to a list form