Python - 更改正在迭代的列表。超出范围

时间:2013-11-28 13:30:18

标签: python date matplotlib iterator

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循环迭代时会失去范围?

1 个答案:

答案 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]