我有以下数据列表
data1 = [[4,5,9],[4,7,2],[11,13,15]]
data2 = [[1,2,3,7],[3,6,8,5],[12,10,15,17]]
我希望按照以下步骤完成列表的合并。
data = [[4,5,9,1,2,3,7], [4,7,2,3,6,8,5], [11,13,15,12,10,15,17]]
即合并data1和data2中索引0处的元素,以及data1和data 2中索引1处的元素,依此类推。
data1 = [[4,5,9],[4,7,2],[11,13,15]]
data2 = [[1,2,3,7],[3,6,8,5],[12,10,15,17]]
for i in range (0,2):
for j in range(0,3):
data1[i].extend(data2[j])
print(data1)
答案 0 :(得分:4)
将zip()
用于列表理解:
data1 = [[4,5,9],[4,7,2],[11,13,15]]
data2 = [[1,2,3,7],[3,6,8,5],[12,10,15,17]]
data = [x+y for x, y in zip(data1, data2)]
# [[4, 5, 9, 1, 2, 3, 7], [4, 7, 2, 3, 6, 8, 5], [11, 13, 15, 12, 10, 15, 17]]
data1 = [[4,5,9],[4,7,2],[11,13,15]]
data2 = [[1,2,3,7],[3,6,8,5],[12,10,15,17]]
for i in range(len(data1)):
data1[i].extend(data2[i])
print(data1)
# [[4, 5, 9, 1, 2, 3, 7], [4, 7, 2, 3, 6, 8, 5], [11, 13, 15, 12, 10, 15, 17]]
答案 1 :(得分:4)
尝试以下操作:
data_to_merge = [data1,data2]
merged = [sum(ds,[]) for ds in zip(*data_to_merge)]
您还可以使用numpy的hstack
,我觉得它更直观
merged = np.hstack(data_to_merge)
答案 2 :(得分:3)
如果您确定data1
和data2
总是具有相同数量的元素(子列表),则可以按以下方式使用map
:
data1 = [[4,5,9],[4,7,2],[11,13,15]]
data2 = [[1,2,3,7],[3,6,8,5],[12,10,15,17]]
data = list(map(lambda x,y:x+y,data1,data2))
print(data)
输出:
[[4, 5, 9, 1, 2, 3, 7], [4, 7, 2, 3, 6, 8, 5], [11, 13, 15, 12, 10, 15, 17]]
答案 3 :(得分:2)
我比较了其他答案中给出的解决方案:
def f1(original_data):
return [
x+y
for x, y in zip(*original_data)]
def f2(original_data):
return [
sum(x, [])
for x in zip(*original_data)]
def f3(original_data):
data_1 = original_data[0]
data_2 = original_data[1]
for i in range(len(data_1)):
data_1[i].extend(data_2[i])
return data_1
def f4(original_data):
return np.hstack(original_data).tolist()
时间是:
>>> import timeit
>>> timeit.timeit('f(data)', 'from __main__ import data, f1 as f')
0.6496335420088144
>>> timeit.timeit('f(data)', 'from __main__ import data, f2 as f')
1.1647848110005725
>>> timeit.timeit('f(data)', 'from __main__ import data, f3 as f')
0.6762638779910048
>>> timeit.timeit('f(data)', 'from __main__ import data, f4 as f')
8.561359490995528
对于这些简短列表,我的f1()
中的版本似乎是最快的。
注意:请注意f3()
中的代码,因为它会修改原始数据,因此您必须将其作为最后一个运行。其他功能将返回新副本,并且不要触摸原始副本。
一个区别是f2()
中的版本适用于多个列表,而不仅仅是2个;但是比较慢f4()
(使用numpy
)也适用于多个列表,但是速度较慢。
答案 4 :(得分:1)
您可以使用运算符concat()
和函数starmap()
;:
from operator import concat
from itertools import starmap
list(starmap(concat, zip(data1, data2)))
# [[4, 5, 9, 1, 2, 3, 7], [4, 7, 2, 3, 6, 8, 5], [11, 13, 15, 12, 10, 15, 17]]