我有一个来自 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]]
如果你想在每个列表中更改大于 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 的值。
count
break
通过使用上述修改后的代码,你将能够将每个列表中大于 1 的第二个值更改为该值加上 100,从而得到预期的结果。