【问题标题】:How to update elements of a nested list in python? [duplicate]如何在python中更新嵌套列表的元素? [复制]
【发布时间】:2023-03-26 17:44:02
【问题描述】:

我正在迭代 python 中的列表列表,我想更改嵌套列表中某些元素的日期格式。我试过了:

for dividend in dividend_data:
    for date in dividend[1], dividend[3], dividend[4], dividend[5]:
        date = datetime.strptime(date, '%m/%d/%Y').strftime("%Y-%m-%d")

但“日期”变量不会带回原始列表元素。我可以通过单独处理它们来做到这一点:

dividend[1] = datetime.strptime(dividend[1], '%m/%d/%Y').strftime("%Y-%m-%d")
dividend[3] = datetime.strptime(dividend[3], '%m/%d/%Y').strftime("%Y-%m-%d")
dividend[4] = datetime.strptime(dividend[4], '%m/%d/%Y').strftime("%Y-%m-%d")
dividend[5] = datetime.strptime(dividend[5], '%m/%d/%Y').strftime("%Y-%m-%d")

但是,必须有更好的方法来处理这个问题,对吧?

【问题讨论】:

    标签: python nested-lists


    【解决方案1】:

    我认为您实际上并没有更改日期变量。在

    for date in dividend[1], dividend[3], dividend[4], dividend[5]:
    

    您正在创建一个名为 date 的变量。更改此变量与更改该数组中的实际值不同。你可能需要做的是

    for i in 1, 3, 4, 5:
        dividend[i] = datetime.strptime(dividend[i], '%m/%d/%Y').strftime("%Y-%m-%d")
    

    【讨论】:

      【解决方案2】:
      for dividend in dividend_data:
          for index in (1,3,4,5):
              date = dividend[index]
              dividend[index] = datetime.strptime(date, '%m/%d/%Y').strftime("%Y-%m-%d")
      

      发生的情况是您没有更改列表元素,您只是将一个新事物分配给一个局部变量的值,该值很快被下一个事物覆盖,不会影响列表。

      所以,获取索引并像上面一样进行操作,更改列表中的项目,而不是仅仅分配一个新变量。

      【讨论】:

        【解决方案3】:

        这实际上与 嵌套 列表没有任何关系,而是一般的列表。您可以就地编辑它们,但不能使用元素的副本进行编辑。

        for idx in (1,3,4,5):
            dividend[idx] = datetime.strptime(dividend[idx], '%m/%d/%Y').strftime("%Y-%m-%d")
        

        【讨论】:

          【解决方案4】:

          改为使用索引。问题是日期是与数组中的值分开的变量,因此将其设置为等于新的日期格式只会重新分配该变量。试试这个:

          for dividend in dividend_data:
              for date_num in range(1, 6):
                  dividend[date_num] = datetime.strptime(dividend[date_num], '%m/%d/%Y').strftime("%Y-%m-%d")
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-01-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-02-02
            相关资源
            最近更新 更多