列表与数组的转化

目录

  • 用np.array(a)将列表转换为数组
  • 列表转数组的特殊情况(一)
  • 列表转数组的特殊情况(二)
  • 针对子元素个数不一致的解决办法
  • 用a.tolist()函数将数组转化为列表

在python的学习中,经常会用到数组与列表的相互转化,本文主要介绍下关于数组与列表转化的问题。

用np.array(a)将列表转换为数组

程序显示:

import numpy as np
import random

a=[[[random.randint(1,9) for x in range(5)]for i in range(3)]for j in range(2)]
print(type(a))
print(a)

b=np.array(a)
print(type(b))
print(b)

输出的结果为:

<class 'list'>

[[[2, 2, 1, 3, 5], [9, 6, 3, 7, 2], [4, 9, 7, 2, 5]], [[6, 4, 9, 4, 9], [1, 4, 7, 2, 5], [2, 6, 3, 6, 7]]]

<class 'numpy.ndarray'>

[[[2 2 1 3 5]
  [9 6 3 7 2]
  [4 9 7 2 5]]

 [[6 4 9 4 9]
  [1 4 7 2 5]
  [2 6 3 6 7]]]

由上面的结果可以看出很顺利就完成了列表到数组的转化。

列表转数组的特殊情况(一)

import numpy as np
import random

f=[]
e=[random.randint(1,9) for x in range(5)]
f.append(np.array(e))
g=[random.randint(1,9) for x in range(5)]
f.append(g)
print(f)
f1=np.array(f, dtype=object)
print("转为数组后:")
print(f1)

结果显示为:

[array([7, 3, 7, 4, 2]), [7, 9, 8, 1, 5]]

转为数组后:

[[7 3 7 4 2]
 [7 9 8 1 5]]

可以看出原来程序中的f是既含有数组类型,又含有列表类型。由于数组和列表的长度是一样的,所以可以顺利将f的所有数据全部转化为数组型,得到的f1。

说到这里,那么就会想到,如果一个列表中含有多个子列表,子列表中的数据量不完全相同,那么结果会怎样呢?

列表转数组的特殊情况(二)

import numpy as np
import random

f=[]
e=[random.randint(1,9) for x in range(5)]
f.append(np.array(e))
# 此处做了修改
g=[random.randint(1,9) for x in range(4)]
f.append(g)
print(f)
f1=np.array(f, dtype=object)
print("转为数组后:")
print(f1)
print(len(f))

这次运行后得到的显示为:

[array([7, 5, 3, 9, 4]), [8, 7, 9, 1]]

转为数组后:

[array([7, 5, 3, 9, 4]) list([8, 7, 9, 1])]

2

我们可以发现,运行的结果虽然没有问题,但是得到的新的f1却不是我们想要的,我们希望f1里面包含9个元素,但是通过len(f1)可以看到只有2个元素了。

由此可以看到,要想通过np.array函数将上面程序中的情况转化为数组,需要保证每个f中的每个子元素中含的子元素个数相同。

针对子元素个数不一致的解决办法

import numpy as np
import random

f=[]
e=[random.randint(1,9) for x in range(5)]
f.append(np.array(e))
# 此处做了修改
g=[random.randint(1,9) for x in range(4)]
f.append(g)
print(f)
f1=np.array(f, dtype=object)
print("转为数组后:")
print(f1)
print(len(f))

print("重新转化")
f1=f1[0].tolist()+f1[1]
print(f1)
print(len(f1))

运行后的结果显示:


[array([5, 8, 6, 4, 5]), [1, 4, 3, 6]]
转为数组后:
[array([5, 8, 6, 4, 5]) list([1, 4, 3, 6])]
2
重新转化
[5, 8, 6, 4, 5, 1, 4, 3, 6]
9

可以看出这次成功得到想要的结果了。

由于在进行多重列表转数组时会因为子列表中元素个数不一样从而导致出错,所以在此进行一下总结。

用a.tolist()函数将数组转化为列表

通过上面的例子就可以看到,博主将f1中的第一个子元素(是一个数组)转化为了列表。

在此再用一个程序来说明:

import numpy as np
import random

a=[random.randint(1,9) for x in range(5)]
a_array=np.array(a)
print(a_array)
print(type(a_array))
a_list=(a_array).tolist()
print(a_list)
print(type(a_list))

结果显示为:

[6 1 9 3 1]
<class 'numpy.ndarray'>
[6, 1, 9, 3, 1]
<class 'list'>

你可能感兴趣的:(python函数库,python,numpy)