Python: Intertwining two lists
做以下事情的方法是什么?
我有两张相同长度的
1 | c = [a[0], b[0], a[1], b[1], ..., a[n-1], b[n-1]] |
1 | c = [item for pair in zip(a, b) for item in pair] |
号
阅读有关zip的文档。
要与Ignacio的答案进行比较,请看以下问题:如何使用列表理解将元组转换为一维列表?
1 | c = list(itertools.chain.from_iterable(itertools.izip(a, b))) |
1 | c = [item for t in zip(a,b) for item in t] |
另一种方法是:
1 | sum(([x,y] for (x,y) in zip(a,b)), []) |
。
(可能不是很有效,因为您同时形成了临时元组(x,y)和临时列表[x,y]。)
1 | c = [item for i in zip(a,b) for item in i] |
。
或者,您可以尝试:
1 | c=[(a,b)[i%2][i/2] for i in xrange(2*n)] |
当然可读性较差
这个怎么样(在python 2和3上测试):
1 | list(sum(zip(a, b), ())) |
。
或麻木:
1 2 | import numpy as np np.vstack((a, b)).T.flatten().tolist() |