2013-11-28 27 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]