为循环定义python数组大小

时间:2015-08-03 21:56:42

标签: python arrays numpy

我需要通过for循环在数组的每一行上添加数据。为此我想到了使用vstack。

但由于我有两种类型的数组(大小不同),我想定义列号,只列列号,因为我不知道我将拥有多少行。具有预定义NaN成员的数组,以便在:

之后具有这样的数组
Array=
[ x , x , x , NaN,NaN] # in case size is 3
[ x, x , x , x , x] # in case size is 5

代码是:

Array=[]
forArray=[]
for line in searchlines:
    Array=re.findall(r'[-+]?\d*\.\d+|\d+', line)
    size=len(Array)

    if size == 3:
        [G,x,y]= Array

    if size == 5:
        [G,x,y,i,j]= Array
forArray=np.vstack((forArray,Array))

我试过了:

if size == 3:
    [G,x,y, NaN, NaN]= Array

但是没有工作...........

1 个答案:

答案 0 :(得分:0)

我无法弄清楚你想要做什么,但我会批评你的代码

Array=[]      # bad name, especially when the value is a list
forArray=[]
for line in searchlines:
    Array=re.findall(r'[-+]?\d*\.\d+|\d+', line)
    # why did you intially set Array to []?
    size=len(Array)

    if size == 3:
        [G,x,y]= Array
        # so you are assigning the 3 values in Array to 3 variables
    if size == 5:
        [G,x,y,i,j]= Array
        # and 5 variables
forArray=np.vstack((forArray,Array))

在最后一行,forArray是一个空列表,Array有3或5个值

np.vstack(([],[1,2,3]))

产生一个ValueError,因为这两个列表的长度不匹配。

为什么使用vstack?到目前为止,您正在使用列表。

if size == 3:
    [G,x,y, NaN, NaN]= Array

but is not working...........

在没有说出错的情况下说“不工作”是不礼貌的 - 错误的结果,具体的错误信息等等?

[a,b,c,NaN,NaN]=[1,2,3,4,5]

运行正常,将NaN设置为5.但只有3个值,我得到ValueError: need more than 3 values to unpack。这是基本的Python - 当解压缩时,你需要在=。

的每一侧都有匹配数量的值

你想用这个表达做什么?

numpy和数组中退一步,尝试使用Python列表使其正常工作。