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()
我跟随另一个执行类似任务的post,但是它只是将B中的元素插入到A中。此方法未生成新列表C。
for i,v in enumerate(B):
A.insert(2*i+1,v)
如何创建一个基于A和B的偶数/奇数元素合并的新列表C?
谢谢。
答案 0 :(得分:1)
我建议您使用numpy而不是将其转换为列表(即A = A.tolist()
和B = B.tolist()
之前的列表):
C = np.dstack((A,B)).flatten()
但是,如果您坚持使用列表,则可以创建一个列表并向其中添加插入列表:
C = [None]*(len(A)+len(B))
C[::2] = A
C[1::2] = B
它们都创建类似的输出(一个numpy数组和另一个列表)。您的示例中的输出:
[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]
答案 1 :(得分:1)
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]
答案 2 :(得分:0)
结合使用builtin zip()
和列表理解。
C = [item for sublist in zip(A, B) for item in sublist]
这是此代码(某种程度上)的详细描述:
C = []
for sublist in zip(A, B):
for item in sublist:
C.append(item)
或更短:
C = []
for sublist in zip(A, B):
C.extend(sublist)
请注意,最短列表结束时,将停止使用zip(A, B)
。如果您需要其他行为,请使用zip_longest()
。
答案 3 :(得分:0)
OP:如何创建一个基于A和B的偶数/奇数元素合并的新列表C?
假设您有两个混合有奇/偶元素的列表,则可以将奇/偶元素分开并将它们存储在单独的列表中,然后使用zip()对其进行迭代:
A = [1,2,3,41,10,5,3,100]
B = [10,21,22,4,18,1,2,9]
odd_lst = []
even_lst = []
def is_even_odd(item):
if int(item) % 2 == 0:
even_lst.append(item)
else:
odd_lst.append(item)
for a_item, b_item in zip(A,B):
is_even_odd(a_item)
is_even_odd(b_item)
print([item for tup in zip(odd_lst, even_lst) for item in tup])
输出:
[1, 10, 21, 2, 3, 22, 41, 4, 5, 10, 1, 18, 3, 2, 9, 100] # new list with odd,even elements sequence