我对Python非常陌生,正在努力学习基础知识。对名单有疑问。你知道吗
列个清单:
L = [[1,2,3],[4,5,6],[3,4,6]]
输出应为:
[[2,4,6],[8,10,12],[6,8,12]]
对我有效的代码如下
for x in range(len(L)):
for y in range(len(L[x])):
L[x][y] = L[x][y] + L[x][y]
print L
它给出输出[[2,4,6],[8,10,12],[6,8,12]]
。你知道吗
现在我想用不同的代码得到相同的输出:
for x in L:
a = L.index(x)
for y in L[a]:
b = L[a].index(y)
L[a][b] = L[a][b] + L[a][b]
print L
使用上述代码,获得的输出为:
[[4,2,6],[8,10,12],[12,8,6]]
我试着调试上面的输出。
我在"L[a][b] = L[a][b] + L[a][b]"
行上方放置了一个print语句,用于打印a和b。我惊讶地看到a和b的值是:
0,0
0,0
0,2
1,0
1,1
1,2
2,0
2,1
2,0
同样,如果我注释掉"L[a][b] = L[a][b] + L[a][b]"
行,那么a和b的值是预期的:
0,0
0,1
0,2
1,0
1,1
1,2
2,0
2,1
2,2
我怀疑这可能是由于python中变量的作用域造成的,并尝试研究了一些关于python中作用域的东西。但我没有得到合适的答案,无论是范围界定或上述问题。你知道吗
您正在用语句修改列表-
L[a][b] = L[a][b] + L[a][b]
e、 g.-L[0][0] = 1
最初 然后将其修改为L[0][0]=2在下一个循环中,您搜索索引2,现在是0,0,因为您修改了列表L。 我试着在你的例子中把L和a,b一起打印出来。结果解释了行为-
正如其他人所解释的,当您使用
index
函数时,它会找到您要搜索的值的第一个匹配项。所以第一次通过循环(对于第一行),它看起来像为了以更简单、更确定的方式获取索引,可以在列表上使用
enumerate
函数。它将为您提供一个迭代器,当您在列表中移动时,它将返回索引和值。你知道吗请注意,这将像在原始解决方案中那样就地完成。你知道吗
L=[[2,4,6],[8,10,12],[6,8,12]]
实现所需输出的最佳方法是使用list comprehension。您可以执行以下操作:
输出
这将在列表中的每个
sublist
上迭代L
,并将sublist
中的每个el
乘以2,从而获得所需的结果。你知道吗相关问题 更多 >
编程相关推荐