python 如何使用enumerate()更改嵌套列表中值

swvgeqrz  于 2023-05-16  发布在  Python
关注(0)|答案(1)|浏览(119)

我有一个来自geotiff文件的2D数组。请参见下面的示例数组:

example_array = [[ 0, 1, 1, 0, 0, 0, 0], 
                 [ 2, 1, 1, 2, 0, 0, 0], 
                 [ 0, 3, 1, 1, 3, 0, 0], 
                 [ 4, 1, 1, 4, 0, 0, 0], 
                 [ 0, 5, 1, 1, 5, 0, 0], 
                 [ 0, 1, 1, 0, 0, 0, 0]]

我试图写一个程序,将改变每个嵌套列表中第一个大于1的数字为'value +100'。
在其他人的帮助下,可以看到下面的工作代码片段:

for i, sub_list in enumerate(example_array[1:], start= 1):
 for j, entry in enumerate(sub_list[1:][1:1], start = 1):
        if entry > 1 and j != 1 and j != len(sub_list):
            example_array[i][j] += 100
print(example_array)

上面的代码产生了下面的错误示例数组,其中没有任何值发生变化:

incorrect_example_array = [[ 0, 1, 1, 0, 0, 0, 0], 
                           [ 2, 1, 1, 2, 0, 0, 0], 
                           [ 0, 3, 1, 1, 3, 0, 0], 
                           [ 4, 1, 1, 4, 0, 0, 0], 
                           [ 0, 5, 1, 1, 5, 0, 0], 
                           [ 0, 1, 1, 0, 0, 0, 0]]

我想创建以下正确的示例数组

correct_example_array = [[  0,  1,  1, 0, 0, 0, 0], 
                         [ 102, 1,  1, 2, 0, 0, 0], 
                         [  0, 103, 1, 1, 3, 0, 0], 
                         [ 104, 1,  1, 4, 0, 0, 0], 
                         [  0, 105, 1, 1, 5, 0, 0], 
                         [  0,  1,  1, 0, 0, 0, 0]]
rdlzhqv9

rdlzhqv91#

外部循环不需要索引; enumerate不需要。一旦找到匹配项,就可以中断内部循环。也不需要对内部索引执行任何检查。

for l in example_array:
    for i, x in enumerate(l):
        if x > 1:
            l[i] += 100
            break

相关问题