我有一个很大的数组,里面有很多子数组,并且正在尝试加入其中的所有子数组。我知道如何串联数组,但是由于内部数组的数量各不相同,因此我不知道要使一个函数串联这些数组。我知道我将需要一个或多个循环,但不确定如何执行。到目前为止,我一直在像这样手动进行操作,直到我到达最后一个索引为止:
ldata = ldata[0]+ldata[1]+ldata[2]+ldata[3]+ldata[4]
其中ldata是更大的列表,所有索引都是内部列表。我该怎么做?
编辑:这是一个示例
a = [[1,2],[3,4],[5,6]]
答案 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