2013-11-28 28 views
0

x2012是['01/01/2013','02/01/2013',...]形式的日期列表。Python - 更改正在迭代的列表。超出范围

我想迭代通过x2012并将值从(字符串)日期更改为浮动。

print(row) -prints浮动。

for row in x:print(row) -prints(string)dates。

for row in x2012:print(row) -prints(string)dates。

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

尝试修复缩进第一 –

+0

编辑:

[datetime.strptime(dt, '%d/%m/%Y').toordinal() for dt in x] 

您可以用输出替换x所有元素纠正缩进。这是代表问题 – Phoenix

+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()

x[:] = [datetime.strptime(dt, '%d/%m/%Y').toordinal() for dt in x]