【问题标题】:Change value of currently iterated element in list更改列表中当前迭代元素的值
【发布时间】:2020-04-07 00:01:24
【问题描述】:

问题: 当你使用建筑时

for a in _list_:
    print a

它打印数组中的每一项。但是你不能改变数组。是否可以更改数组的值(类似于 a=123,但这不起作用) 我知道这是可能的(例如在 while 循环中),但我想这样做(更优雅)

在 PHP 中是这样的

foreach ($array as &$value) {
    $value = 123;
}

(由于&符号,作为引用传递)

【问题讨论】:

    标签: python


    【解决方案1】:
    for idx, a in enumerate(foo):
        foo[idx] = a + 42
    

    但请注意,如果您这样做,您可能应该查看列表推导(或map),除非您真的想就地变异(只是不要从迭代列表中插入或删除项目)。

    写成列表推导式的相同循环如下所示:

    foo = [a + 42 for a in foo]
    

    【讨论】:

      【解决方案2】:

      因为python迭代器只是内存中对象的“标签”,设置它会使其指向其他东西。

      如果迭代器是一个可变对象(list、set、dict 等),您可以修改它并在同一个对象中查看结果。

      >>> a = [[1,2,3], [4,5,6]]
      >>> for i in a:
      ...    i.append(10)
      >>> a
      [[1, 2, 3, 10], [4, 5, 6, 10]]
      

      如果您想将每个值设置为 123,您可以使用列表索引并访问它或使用 list comprehension

      >>> a = [1,2,3,4,5]
      >>> a = [123 for i in a]
      >>> a
      [123, 123, 123, 123, 123]
      

      但您将创建另一个列表并将其绑定到相同的名称。

      【讨论】:

        【解决方案3】:
        for a in _list_:
          _list_[_list_.index(a)]=123
        

        【讨论】:

        • 这是非常低效的:(
        猜你喜欢
        • 1970-01-01
        • 2015-04-07
        • 1970-01-01
        • 2016-03-16
        • 2019-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-07
        相关资源
        最近更新 更多