Python 我试图在循环时访问2D阵列的其他部分,但不确定具体是如何完成的
这是一个包含一些值的二维列表。我想将列表中的每个值乘以1.1,如果某个值等于或大于255,则会提示“烧坏”。我的程序目前只能访问列表中的第一个列表并将其值相乘。我希望它也能为其他人做这件事。多谢各位 列表=[[240,10,10,10,10,10,10240], [80,80,240,80,80,240,80,80], [80,80,240,80,80,240,80,80], [80,80,150,150,150,150,80,80], [80,80,240,240,240,240,80,80], [80,80,150,150,150,150,80,80], [240,240,150,150,150,150,240,240], [240,240,150,150,150,150,240,240]] i=0 r=0 而我<8: 当r<8时: 列表[i][r]=列表[i][r]*1.1 如果列表[i][r]>255: 列表[i][r]=烧毁 打印列表[i][r] r+=1 i+=1Python 我试图在循环时访问2D阵列的其他部分,但不确定具体是如何完成的,python,arrays,python-3.x,list,while-loop,Python,Arrays,Python 3.x,List,While Loop,这是一个包含一些值的二维列表。我想将列表中的每个值乘以1.1,如果某个值等于或大于255,则会提示“烧坏”。我的程序目前只能访问列表中的第一个列表并将其值相乘。我希望它也能为其他人做这件事。多谢各位 列表=[[240,10,10,10,10,10,10240], [80,80,240,80,80,240,80,80], [80,80,240,80,80,240,80,80], [80,80,150,150,150,150,80,80], [80,80,240,240,240,240,80,80]
完成内部循环后,需要将r的值重置为0。否则,内部循环将始终在r设置为8的情况下测试条件,因此在第一次执行后不再执行 更新代码:
list = [[240,10,10,10,10,10,10,240],[80,80,240,80,80,240,80,80],[80,80,240,80,80,240,80,80],[80,80,150,150,150,150,80,80],[80,80,240,240,240,240,80,80],[80,80,150,150,150,150,80,80],[240,240,150,150,150,150,240,240],[240,240,150,150,150,150,240,240]]
i = 0
r =0
while i < 8:
while r < 8:
list[i][r] = list[i][r]*1.1
if list[i][r] > 255:
list[i][r] = "burnt out"
print (list[i][r])
r += 1
i += 1
r = 0
必须为i的每个循环重置r=0
list = [[240,10,10,10,10,10,10,240],
[80,80,240,80,80,240,80,80],
[80,80,240,80,80,240,80,80],
[80,80,150,150,150,150,80,80],
[80,80,240,240,240,240,80,80],
[80,80,150,150,150,150,80,80],
[240,240,150,150,150,150,240,240],
[240,240,150,150,150,150,240,240]]
i = 0
while i < 8:
r = 0 # put inside the loop
while r < 8:
list[i][r] = list[i][r]*1.1
if list[i][r] > 255:
list[i][r] = "burnt out"
print (list[i][r])
r += 1
i += 1
在您的代码中,r=8表示i>0,这是使用列表理解和映射函数来实现这一点的最常用的python方法 nlist=[[240,10,10,10,10,10,10240], [80, 80, 240, 80, 80, 240, 80, 80], [80, 80, 240, 80, 80, 240, 80, 80], [80, 80, 150, 150, 150, 150, 80, 80], [80, 80, 240, 240, 240, 240, 80, 80], [80, 80, 150, 150, 150, 150, 80, 80], [240, 240, 150, 150, 150, 150, 240, 240], [240, 240, 150, 150, 150, 150, 240, 240]] nlist[:]=[listmaplambda x:x*1.1如果x*1.1在这种情况下,我将使用一个简单的for循环:
for v1 in list_:
for i2, v2 in enumerate(v1):
v1[i2] = v2 * 1.1
if v1[i2] > 255:
v1[i2] = 'BURN OUT'
顺便说一句,不要对变量名使用保留字列表
输出:
[11.0,11.0,11.0,11.0,11.0,11.0,11.0,11.0,“燃尽”],
[88.0,88.0,'燃尽',88.0,88.0,'燃尽',88.0,88.0],
[88.0,88.0,'燃尽',88.0,88.0,'燃尽',88.0,88.0],
[88.0, 88.0, 165.0, 165.0, 165.0, 165.0, 88.0, 88.0],
[88.0,88.0,‘燃尽’、‘燃尽’、‘燃尽’、‘燃尽’、‘燃尽’、‘88.0,88.0],
[88.0, 88.0, 165.0, 165.0, 165.0, 165.0, 88.0, 88.0],
[BURN OUT',BURN OUT',165.0,165.0,165.0,165.0,165.0',BURN OUT',BURN OUT'],
['BURN OUT','BURN OUT',165.0,165.0,165.0,165.0','BURN OUT','BURN OUT']
这应该行得通。发生了什么?为什么要使用while循环?你没有在内部循环之后重置r的值!所有这些都放在一边,这让你很痛苦,你研究过numpy吗?
for v1 in list_:
for i2, v2 in enumerate(v1):
v1[i2] = v2 * 1.1
if v1[i2] > 255:
v1[i2] = 'BURN OUT'