Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在更大的数组中连接所有数组_Python_Arrays - Fatal编程技术网

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

Python 在更大的数组中连接所有数组,python,arrays,Python,Arrays,我有一个很大的数组,里面有很多子数组,我正在尝试加入所有的子数组。我知道如何连接数组,但由于内部数组的数量不同,我不知道如何使用一个函数来连接这些数组。我知道我需要一个或多个循环,但不知道如何做。到目前为止,我一直像这样手动操作,并一直进行到最后一个索引: ldata = ldata[0]+ldata[1]+ldata[2]+ldata[3]+ldata[4] 其中ldata是较大的列表,所有索引都是内部列表。我该怎么做 编辑:下面是一个例子 a = [[1,2],[3,4],[5,6]]

我有一个很大的数组,里面有很多子数组,我正在尝试加入所有的子数组。我知道如何连接数组,但由于内部数组的数量不同,我不知道如何使用一个函数来连接这些数组。我知道我需要一个或多个循环,但不知道如何做。到目前为止,我一直像这样手动操作,并一直进行到最后一个索引:

ldata  = ldata[0]+ldata[1]+ldata[2]+ldata[3]+ldata[4]
其中ldata是较大的列表,所有索引都是内部列表。我该怎么做

编辑:下面是一个例子

a = [[1,2],[3,4],[5,6]]
您可以使用:

输出


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

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

这表明用一个简短的函数将数组相加也很好。

您可以抓取每个子列表并添加到一个新列表中

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

您可以使用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

你能添加一个例子吗?看看reduce或functools.reduce,所有答案都取决于Python版本库!如果我能接受的话,我会接受更多,但霍克尔的一个是最简单的,我是第一个看到它的。@Athreyaadaniel:sum的表面简单性隐藏了在引擎盖下发生的二次复制。你说你有一个很大的数组,里面有很多子数组;有了大量的子数组,当一个更高效的实现在不到一秒钟内完成时,你可以花费数小时到数周的时间等待求和。我建议你接受另一个答案,而不是我的答案。太好了!虽然文档说明了级联一系列迭代,但是考虑使用ItTraveStudioStand谢谢,这是一个简单而有效的解决方案!如果内置模块同样工作良好,为什么要使用它呢?因为它不工作。尝试使用itertools.chain加入一百万个列表,甚至不需要一秒钟。试着用sum来做这件事,几个小时后你就要回来了。事实上,它开始的时间要快得多,我没想到sum会那么糟糕……这个解决方案似乎有最好的性能,但不要在阴影中列出变量列表。是的,我的不好。我想写“子列表”,但没有。。。
new_ldata = []
for sublist in ldata:
    new_ldata += sublist
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