首页 > 解决方案 > 合并两个列表(偶数/奇数元素)

问题描述

len_array = 10
A = np.zeros( len_array )
B = np.zeros( len_array )

A = np.arange(1, 5, 0.5)
B = np.arange(11, 15, 0.5)
A = A.tolist()
B = B.tolist()

我关注了另一个完成类似任务的帖子,但是它只是将 B 中的元素插入 A。这种方法没有生成新的列表 C。

for i,v in enumerate(B):
    A.insert(2*i+1,v) 

如何创建一个基于偶数/奇数元素合并 A 和 B 的新列表 C?

谢谢。

标签: pythonnumpy

解决方案


In [194]: A = np.arange(1, 5, 0.5) 
     ...: B = np.arange(11, 15, 0.5)                                                                            

派生自的列表A是副本。就地更改C不影响A

In [196]: C = A.tolist()                                                                                        
In [197]: for i,v in enumerate(B): 
     ...:     C.insert(2*i+1,v) 
     ...:                                                                                                       
In [198]: A                                                                                                     
Out[198]: array([1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5])
In [199]: B                                                                                                     
Out[199]: array([11. , 11.5, 12. , 12.5, 13. , 13.5, 14. , 14.5])
In [200]: C                                                                                                     
Out[200]: 
[1.0,
 11.0,
 1.5,
 11.5,
 2.0,
 12.0,
 2.5,
 12.5,
 3.0,
 13.0,
 3.5,
 13.5,
 4.0,
 14.0,
 4.5,
 14.5]

数组方法:

In [201]: np.vstack((A,B))                                                                                      
Out[201]: 
array([[ 1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5],
       [11. , 11.5, 12. , 12.5, 13. , 13.5, 14. , 14.5]])
In [202]: np.vstack((A,B)).ravel(order='F')                                                                     
Out[202]: 
array([ 1. , 11. ,  1.5, 11.5,  2. , 12. ,  2.5, 12.5,  3. , 13. ,  3.5,
       13.5,  4. , 14. ,  4.5, 14.5])

或者我们可以将数组堆叠为列并进行普通的C排序。

===

另一种列表方式 - 用于zip制作列表列表,并将itertools.chain其展平:

In [203]: import itertools                                                                                      
In [204]: [(i,j) for i,j in zip(A,B)]                                                                           
Out[204]: 
[(1.0, 11.0),
 (1.5, 11.5),
 (2.0, 12.0),
 (2.5, 12.5),
 (3.0, 13.0),
 (3.5, 13.5),
 (4.0, 14.0),
 (4.5, 14.5)]
In [205]: list(itertools.chain(*[(i,j) for i,j in zip(A,B)]))                                                   
Out[205]: 
[1.0,
 11.0,
 1.5,
 11.5,
 2.0,
 12.0,
 2.5,
 12.5,
 3.0,
 13.0,
 3.5,
 13.5,
 4.0,
 14.0,
 4.5,
 14.5]

推荐阅读