我试图将数据设置为转换为numpy数组。我有三个清单。两个是一维的,一个是二维的。
a = [1,2,3]
b = [4,5,6]
c = [ [7,8],[9,10],[11,12] ]
我想最终得到这个:
[ [1,4,7,8],[2,5,9,10],[3,6,11,12] ]
我尝试使用zip()
,但它没有深入研究2D数组。
答案 0 :(得分:4)
假设您不介意在转换本身中使用NumPy,以下情况应该有效。
from numpy import array
a = array([1, 2, 3])
b = array([4, 5, 6])
c = array([[7, 8], [9, 10], [11, 12]])
result = array(list(zip(a, b, c[:, 0], c[:, 1])))
请注意,c[:, n]
仅适用于NumPy数组,而不适用于标准Python列表。
答案 1 :(得分:3)
numpy
解决方案(根据您的标记)
In [398]: np.vstack([a,b,np.array(c).T]).T
Out[398]:
array([[ 1, 4, 7, 8],
[ 2, 5, 9, 10],
[ 3, 6, 11, 12]])
这会使c
成为2x3数组:
In [399]: np.array(c).T
Out[399]:
array([[ 7, 9, 11],
[ 8, 10, 12]])
然后可以与a
和b
垂直堆叠(连接),它们也有3个元素。
zip(*c)
是转置的列表形式
In [412]: list(zip(a,b,c))
Out[412]: [(1, 4, [7, 8]), (2, 5, [9, 10]), (3, 6, [11, 12])]
In [418]: list(zip(a,b,*zip(*c)))
Out[418]: [(1, 4, 7, 8), (2, 5, 9, 10), (3, 6, 11, 12)]
答案 2 :(得分:3)
使用python3
就像
a = [1,2,3]
b = [4,5,6]
c = [ [7,8],[9,10],[11,12] ]
[[x, y, *z] for x, y, z in zip(a, b, c)]
[[1, 4, 7, 8], [2, 5, 9, 10], [3, 6, 11, 12]]
答案 3 :(得分:1)
如果您想使用标准Python列表进行操作,可以使用zip
然后处理每一行:
from itertools import chain
a = [1,2,3]
b = [4,5,6]
c = [[7,8], [9,10], [11,12]]
[list(chain.from_iterable(y if isinstance(y, list) else [y] for y in x)) for x in zip(a, b, c)]
答案 4 :(得分:1)
首先,zip
会产生元组,而不是列表,因此您必须将其输出转换为列表:
def lzip(*args):
'Transforms the tuples yielded by zip into equivalent lists.'
for tup in zip(*args):
yield list(tup)
return
# Later...
a = [1, 2, 3]
b = [4, 5, 6]
c = [
[7, 8],
[9, 10],
[11, 12],
]
lzip(a, b)
# A generator that yields: [1, 4], [2, 5], [3, 6]
其次,zip
无论如何都不会返回您想要的内容,因为您尝试在c
的子列表上执行的操作是连接 ,而不是拉链。
首先,lzip
如上例所示的1-d列表,然后将每个子列表与c
中的匹配子列表连接起来。
下面,我使用列表推导来构建组合列表,将其分配给变量,使用两个新的局部变量使zip
操作更清晰:
heads = lzip(a, b)
tails = c
zipped = [head + tail for head, tail in zip(heads, tails)]
# [[1, 4, 7, 8], [2, 5, 9, 10], [3, 6, 11, 12]]
zip
产生包含 n th头和 n 第四个尾部的2元组:
# First iteration:
([1, 4], [7, 8])
# Next iteration:
([2, 5], [9, 10])
# Last iteration:
([3, 6], [11, 12])
这些元组通过列表推导中的(不可见)赋值head, tail = ...
解压缩为两个变量。然后扔掉元组本身。
与head + tail
连接(“添加”)列表将两个列表合并为一个。在这种情况下,成对的2元素列表将成为单独的4元素列表。
最后,列表推导的[
和]
将4元素列表收集到4个元素列表的单个列表中。