将数组转换为列表

2024-06-28 19:14:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了这样一个数组列表:

[[array([  0.00000000e+00,  -1.00000000e+00,  -6.12323400e-17]), array([  0.00000000e+00,   1.00000000e+00,   6.12323400e-17]), array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]]), array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])], [[0.9957649076694132, -0.09193611180665112, 0], array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]]), array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]]), array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])], [[0.012185959917421326, 0.60870153111176395, -0.0], array([ 0.        , -0.47671475, -0.        ]), array([-0.01218596, -0.13198678,  0.        ]), array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])], [array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]]), array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]]), array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]]), array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])]]

我想知道如何将这样的列表转换为列表列表。 我试着通过使用理解列表来解决这个问题:

ves = [x.tolist() for x in j for j in ves]

但是,我得到了一个错误作为回报:

TypeError: 'int' object is not iterable

Tags: in列表forobjectis错误not数组
2条回答

我把这个对象复制到了Ipython会话中。我看到的是

4项清单

In [246]: ll[0]
Out[246]: 
[array([  0.00000000e+00,  -1.00000000e+00,  -6.12323400e-17]),
 array([  0.00000000e+00,   1.00000000e+00,   6.12323400e-17]),
 array([[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]]),
 array([[ 0.,  0.,  0.],
        [ 0.,  0.,  0.],
        [ 0.,  0.,  0.]])]

这是4项列表,元素是一维和二维数组。你知道吗

但是ll[1]包含一个列表(3个项目)和3个2d数组。ll[3]是4个2d数组。你知道吗

要将其转换为纯列表,您必须向下迭代2个级别,并对数组中的每个元素应用tolist()。如果项目已经是列表,则不进行转换。你知道吗

我试着把它写成一个复合列表理解;我必须这样做吗?你现在能处理这些细节吗?你知道吗


In [253]: [[l2.tolist() if isinstance(l2,np.ndarray) else l2 for l2 in l1] for l1 in ll]
Out[253]: 
[[[0.0, -1.0, -6.123234e-17],
  [0.0, 1.0, 6.123234e-17],
  [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]],
  [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]],
 [[0.9957649076694132, -0.09193611180665112, 0],
  [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]],
  [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]],
  [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]],
 [[0.012185959917421326, 0.608701531111764, -0.0],
  [0.0, -0.47671475, -0.0],
  [-0.01218596, -0.13198678, 0.0],
  [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]],
 [[[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]],
  [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]],
  [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]],
  [[0.0, 0.0, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.0]]]]

你的理解力倒过来了。顺序是从左到右的,就像是一个普通的嵌套循环。所以呢

ves = [x.tolist() for x in j for j in ves]

就像

for x in j:
    for j in ves:
        ...

您可以看到这是一个问题,因为它试图将x设置为j中的值,但j还不存在。你知道吗

需要反过来:

ves = [x.tolist() for j in ves for x in j]

相关问题 更多 >