小能豆

在没有已知索引的情况下使用 For 循环和 If 语句更改二维数组中的特定值

python

我有一个来自 geotiff 文件的二维数组。请参阅下面的示例数组:

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 的特定数字更改为“值 + 100”。

在其他人的帮助下,请参阅下面的工作代码片段,该代码片段正确地将每个列表中大于 1 的第一个值更改为该值的 +100。

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

如果我想专门更改每个列表中大于 1 的第二个值,我尝试了以下不正确的代码片段:

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

这里的思考过程是,如果我if x>1:向它添加另一个参数for loop,它将从第一个大于 1 的数字开始,然后移动到第二个大于 1 的值和下一个if x>1:。这里情况不同。example_array有没有人对如何正确更改大于 1 的第二个数字有任何建议,以便在下面显示正确?:

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

阅读 82

收藏
2023-05-21

共1个答案

小能豆

如果你想在每个列表中更改大于 1 的第二个值,你可以使用一个计数器来跟踪大于 1 的值的数量,并在找到第二个大于 1 的值时进行更改。下面是一个修改后的代码示例:

count = 0

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

在上述代码中,我们引入了一个名为 count 的计数器,并在遍历每个列表时进行递增。当我们找到大于 1 的值时,我们将计数器 count 增加 1。然后,我们检查计数器是否等于 2,如果是,则表示我们已经找到了列表中的第二个大于 1 的值,然后将该值减去 100。注意,我们使用 break 语句来退出内部循环,以便只更改第二个大于 1 的值。

通过使用上述修改后的代码,你将能够将每个列表中大于 1 的第二个值更改为该值加上 100,从而得到预期的结果。

2023-05-21