如何在python中更新嵌套列表的元素?

时间:2016-08-19 15:50:21

标签: python nested-lists

我在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")

但" date"变量不会返回到原始列表元素。我可以通过单独处理它们来做到这一点:

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")

但是,必须有更好的方法来解决这个问题,对吗?

4 个答案:

答案 0 :(得分: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")

答案 1 :(得分:0)

<select data-bind="foreach: ts.groups, value: ts.selectedOption">
            <option value ="-1"></option>
                <optgroup data-bind="attr: {label: label}, foreach: children">
                    <option data-bind="text: label, option: value()"></option>
                </optgroup>
        </select>
    <select data-bind="foreach: ts2.groups2,value:ts2.selectedOption">
      <option value ="-1"></option>
        <optgroup data-bind="attr: {label: label}, foreach: children">
          <option data-bind="text: label,option: value()"></option>  
        </optgroup>
    </select>
        <hr />

        <div data-bind="text: ts.specialProperty"></div>

发生的事情是你没有改变列表元素,你只是为一个局部变量的值赋予一个新的东西,它会被下一个东西快速覆盖,从不影响列表。

因此,抓住索引并按上述方式执行,更改列表中的项目而不只是分配新变量。

答案 2 :(得分:0)

这与嵌套列表没有任何关系,但通常与列表有关。您可以在适当的位置编辑它们,但不能使用元素的副本来完成它。

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

答案 3 :(得分:0)

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

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")