我有一个来自csv文件的两个列表,我只想彼此相减。错误消息指示我将列表项转换为整数,但它们不是整数。我试图将它们转换为浮点数,整数等等。
如何查找列表当前包含的数据类型?一般不能在列表中使用浮点项进行计算吗?我做错了什么?
打印列表(似乎是不同的数据类型):
data_WL
>>> [' 0.4001000 ', '0.3966472 ', '0.4365047', '0.4950109', '0.5348455 ', '0.5816008 ']
res_movAvWL
>>> [0.3983736, 0.41657595000000003, 0.4657578, 0.5149282, 0.55822315]
我的代码:
from pylab import *
import csv
from scipy import stats
import numpy as np
mymin = [] # create a new array
data_WL1 = [ float(x) for x in data_WL ] # convert items to float
for i in arange(0,len(data_WL)- (0.5 * movAvWindow),1):
mymin.append=((data_WL1[i]) - (res_movAvWL[i])) # data_WL - movAvWL; detrended peak flood data
res_WLnet = mymin[:] # create a new array which has the same items as mymin
if int(res_WLnet[i]) < 0.8: # if netWL smaller than 0.8m print 0 in list res_WLnet, etc.
res_WLnet.append(0)
else:
if int(mymin[i]) < 1.10:
res_WLnet.append(1)
else:
res_WLnet.append(2)
print res_WLnet
谢谢!
答案 0 :(得分:2)
你确实倒退了,列表可以包含你想要的任何内容。但是你必须用整数访问它们。问题出在这里:
for i in arange(0,len(data_WL)- (0.5 * movAvWindow),1):
mymin.append=((data_WL1[i]) - (res_movAvWL[i]))
您正在使用i
来访问列表的索引,但请注意在确定i
应该迭代的范围时使用浮点数。这引入了尝试访问data_WL1[0.5]
的可能性(您可能实际上得到了不同的结果)。
根据您对该范围的确切意图,您可能希望使用int(len(data_WL)- (0.5 * movAvWindow))
来确保i
以整数递增。
答案 1 :(得分:0)
尝试打印mymin,我打赌它是空的。
您需要从此行中删除“=”
mymin.append=((data_WL1[i]) - (res_movAvWL[i]))
并将其替换为
mymin.append(data_WL1[i] - res_movAvWL[i])
说明:
您的data_WL列表需要像您一样转换为浮点数,因为它最初是一个字符串列表(注意引号)
我不知道什么是movAvWindow,如果它是一个数字就可以,但是如果它是一个列表,请确保你没有将它与浮点数相乘,使用
len(movAvWindow)* 0.5
代替。
列表可能包含不同类型的值,如果要检查所有类型,请使用:
设置([列表中x的类型(x)])