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

2024-09-30 01:26:30 发布

您现在位置:Python中文网/ 问答频道 /正文

x2012是一个日期列表,格式为['01/01/2013','02/01/2013',...]。你知道吗

我尝试遍历x2012,并将值从(字符串)日期更改为浮动。你知道吗

print(row)-打印浮动。你知道吗

for row in x:print(row)-打印(字符串)日期。你知道吗

for row in x2012:print(row)-打印(字符串)日期。你知道吗

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循环的迭代时会丢失作用域?你知道吗


Tags: 字符串in列表fordef格式yearint
1条回答
网友
1楼 · 发布于 2024-09-30 01:26:30

您没有更改列表中的值。只将.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]

相关问题 更多 >

    热门问题