Python列表插入函数和数据类型问题

时间:2013-02-13 22:53:02

标签: python list numpy insert type-conversion

我遇到了问题,我认为原因是插入功能的性质。 文档说插入的工作原理如下:

list.insert(index, object)

这里的关键点是“对象”。为了执行一个对值有效的if语句,我将原始列表转换为数组。 python自动计算此数组的数据类型如下:

In [25]: MinorTrendTypeArr.dtype
Out[25]: dtype('int64')

但是在列表中插入所需的项目后

MinorTrendType

新阵列

MinorTrendTypeArr2

如前所述,这必须是因为insert函数将对象项添加到列表中的方法。 有数据类型

In [25]: MinorTrendTypeArr2.dtype
Out[25]: dtype('object')

尝试转换

时收到以下错误进一步证明了这一点
MinorTrendType

变量到新数组中。

In [27]: run triptrade.py
This is the length of MinorTrendType the first time = 12356
This is the length of MinorTrendType after adding plustwos elements = 13179
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/usr/lib/python2.7/dist-packages/IPython/utils/py3compat.pyc in execfile(fname, *where)
    173             else:
    174                 filename = fname
--> 175             __builtin__.execfile(filename, *where)

/home/kane/tripkane_python/triptrade.py in <module>()
    579 
    580 MinorTrendArr2 = np.array(MinorTrend, dtype = np.int64)
--> 581 MinorTrendTypeArr2 = np.array(MinorTrendType, dtype = np.int64)
    582 
    583 

ValueError: setting an array element with a sequence.

但是,在没有输入外部值的变量中也不会出现同样的问题。我认为可能有一种更好的做事方式,但我现在正在利用我非常有限的知识来进步。任何帮助,替代方案的建议将是最受欢迎的。注意:我无法在一个循环中输入所有必需的值,因为输入项​​目会更改列表的长度,除非提到更容易解决。

提前致谢,

凯恩

for n in range(0, len(MinorTrendType)):

    if MinorTrendTypeArr[n] == 2:
        plustwos.append(n)

pl = []
mi = []

PS1 = len(MinorTrendType)
print "This is the length of MinorTrendType the first time = %d" %PS1

for n in range(0, len(plustwos)):
    bbgun = plustwos[n] + len(plustwos[0:n])
    pl.append(bbgun)
    MinorTrendType.insert(pl[n], 22)
    MinorTrend.insert(pl[n], MinorTrend[pl[n]])


PS2 = len(MinorTrendType)
print "This is the length of MinorTrendType after adding plustwos elements = %d" %PS2

MinorTrendArr2 = np.array(MinorTrend, dtype = np.int64)
MinorTrendTypeArr2 = np.array(MinorTrendType, dtype = np.int64)

UPDATE /编辑:

MinorTrendType

是一个整数列表,如下所示:     MinorTrendType = [1,0,-1,1,0,-1,2,-1,1,-1,0,0,0,2,1,0,0,-1,2,1,0, -2 ............]

MinorTrend

是指数列表     MinorTrendType 值存在(这些只是满足某些条件)。我想要实现的是在每个出现的2和-2值内插入标记     MinorTrendType 和重复站点内的重复索引值     MinorTrend 我试过用     地图(i,x)     INT(MinorTrendType [N]) 在一个循环和列表和列表理解中没有成功。我希望这使事情更清楚。我不在乎它是如何完成的,只是想实现它:)

1 个答案:

答案 0 :(得分:0)

哈利路亚!解决方案就在于这样一个事实     MinorTrendArr2.dtype ='object' 而不是    '的Int64' 我怀疑。解决方案在于以下循环:

for n in range(0, len(plustwos)):
bbgun = plustwos[n] + len(plustwos[0:n])
pl.append(bbgun)
MinorTrendType.insert(pl[n], 22)
MinorTrend.insert(pl[n], MinorTrend[pl[n]])

这应该是:

for n in range(0, len(plustwos)):
bbgun = plustwos[n] + len(plustwos[0:n])
pl.append(bbgun)
MinorTrendType.insert(pl[n], [22])
MinorTrend.insert(pl[n], MinorTrend[pl[n]])

唯一的区别是插入到列表中的对象周围有[]。然后python假定数组     MinorTrendArr2 成为     '的Int64' 而不是对象,并允许正确计算下一个if语句:)

干杯