x2012是['01/01/2013','02/01/2013',...]
形式的日期列表。
我正在尝试遍历x2012并将值从(字符串)日期更改为浮点数。
print(row)
-prints floats。
for row in x:print(row)
-prints(字符串)日期。
for row in x2012:print(row)
-prints(字符串)日期。
def xToFloat(x):
for row in x:
day,month,year=row.split('/')
row=date(int(year),int(month),int(day)).toordinal()
print(row)
for row in x:print(row)
xToFloat(x2012)
for row in x2012:
print(row)
为什么在退出for循环迭代时会失去范围?
答案 0 :(得分:3)
您没有更改列表中的值。您只是将.toordinal()
的结果分配给局部变量row
,重新绑定该变量。
要更改列表中的元素,您需要分配回列表索引:
def xToFloat(x):
for i, row in enumerate(x):
day, month, year = row.split('/')
row = date(int(year), int(month), int(day)).toordinal()
x[i] = row
或者,生成一个包含列表推导的新列表;我在这里使用datetime.strptime()
来解析输入,而不是使用字符串拆分和int()
:
[datetime.strptime(dt, '%d/%m/%Y').toordinal() for dt in x]
您可以使用以下内容替换x
的所有元素:
x[:] = [datetime.strptime(dt, '%d/%m/%Y').toordinal() for dt in x]