我有一个函数,它应该将矩阵奇数行中的每个元素增加5,偶数行中的每个元素增加10。我写了下面的代码:
def incrementRows(matrix):
for i in matrix:
print(matrix.index(i))
if matrix.index(i) % 2 == 0:
matrix[matrix.index(i)] = [x + 5 for x in matrix[matrix.index(i)]]
else:
matrix[matrix.index(i)] = [x + 10 for x in matrix[matrix.index(i)]]
return matrix
matrix = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]
print(incrementRows(matrix))
这个代码的问题是,从印刷品来看(矩阵索引(i) )语句,循环从不传递列表中的第一项。我不明白为什么。以下是输出:
0
0
0
[[16, 17, 18, 19, 20], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
如果我从函数中取出If/else语句,那么循环将正确地遍历列表中的每个项。你知道吗
def incrementRows(matrix):
for i in matrix:
print(matrix.index(i))
return matrix
matrix = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]
print(incrementRows(matrix))
结果:
0
1
2
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
有人能告诉我为什么函数中的If/else语句阻止循环遍历列表中的每一项吗?你知道吗
问题是在第二次迭代中,第一项和第二项比较相等,所以index只会再次给出第一项。你知道吗
我相信是时候让你了解enumerate()。基本上这里
i
只是索引,而不必反复扫描列表中的匹配项。你知道吗代码更容易阅读,现在可以正常工作了
这里更直接的方法是使用list comp,并根据在条件表达式中迭代的“行号”来选择加5或10,例如:
对于给定的数据,您将在每个步骤更改矩阵,以确保在索引0处始终可以找到矩阵中的下一项。你知道吗
检查一下,换一下
至
你会看到更多的信息输出:
看到了吗?每次都要更改第0个索引,使其等于矩阵中的下一项。你知道吗
循环一个列表中的项目,然后对列表中的每个项目进行
.index
,当然,总是会首先找到每个项目副本的出现点——除了在任何情况下浪费大量的计算(循环O(N平方),当然应该是O(N))之外,在像你这样的情况下,这会引起真正奇怪的结果。你知道吗要恢复理智,请更改部件:
到,例如
在剩下的时间里使用
where
,无论你现在在哪里重新计算(浪费了荒谬的循环数)matrix.index(i)
。你知道吗相关问题 更多 >
编程相关推荐