当前位置: 首页 > 工具软件 > rowy > 使用案例 >

python中row是什么意思_Python中的2D列表(row total/grand total)

申炳
2023-12-01

我认为一个接一个地分解你的尝试,并讨论每一个尝试中出现的问题是有指导意义的。在

对于初学者来说,您的输入列表是一个二维的数字列表。你需要把它们投给int,最好是马上就投。但是,我假设您在代码中使用的输入列表如下所示:[['1', '1', '-2'], ['-1', '-2', '-3'], ['1', '1', '1']]

它需要将其元素强制转换为int以避免崩溃。在

尝试1

您的代码:

^{pr2}$

主要的误解是您的语句for row in numbers:循环遍历numbers列表中的实际列表,而不是该列表的索引。换句话说,row在第一次迭代中等于['1', '1', '-2'],而不是{}。在

类似地,for column in numbers:被错误地标记,并且还迭代行列表,而不是行中预期的单元格。当您尝试使用这些项索引到列表numbers时,会发生崩溃。您的代码正在执行以下操作:numbers[['1', '1', '-2']][['1', '1', '-2']] # crash

通过不尝试索引到numbers列表,而是使用row和column元素来计算总数,可以解决这个问题。在

您还存在一个逻辑错误,该错误过早地将rowtotal添加到聚合total中,这会超出计数。在

最后,前两行什么也不做,因为循环变量覆盖了值;删除它们。在

以下是重写:total = 0

for row in numbers:

rowtotal = 0

for column in row: # < iterating cells in rows

rowtotal = rowtotal + int(column) # < much better

total = total + rowtotal # < logic error fixed

print(total)

尝试2

您的代码:row = len(numbers)

column = len(numbers[0])

total = 0

for row in range (len(numbers)):

for col in range(len(numbers[0])):

total = total + numbers[row][column] # < crash!

print(total)

和第一个问题类似。在开头有两行引入变量row和{}。当您编写for row in range(len(numbers)):时,您将重写在第1行初始化的row变量。在

但是,当您编写for col in range(len(numbers[0])):时,您并没有重写column,而是试图使用存储列表长度的越界变量{}索引到{},该变量存储了列表的长度,导致程序崩溃。在

当然,如果您还没有转换到int,请不要忘记转换到int。在

固定的:total = 0

for row in range(len(numbers)):

for col in range(len(numbers[row])): # added row here in case of a ragged list

total += int(numbers[row][col])

print(total)

尝试3

您的代码:total = 0

for x in range (0, len(numbers)):

rowtotal = 0

for y in range (0, len(numbers[0])):

rowtotal = rowtotal = int(numbers[x][y]) # < typo! = should be +

print(rowtotal)

total = total + rowtotal

print(total)

太近了!这里的问题是您使用了错误的运算符,=,而您的意思是+。我建议继续使用+=运算符,它将右手边的表达式添加到左侧变量,并将其存储在左侧变量中。在

固定的:total = 0

for x in range (0, len(numbers)):

rowtotal = 0

for y in range (0, len(numbers[0])):

rowtotal = rowtotal + int(numbers[x][y]) # or use rowtotal += int(numbers[x][y])

total += rowtotal

print(total)

我的版本

我是这样写的:print(sum([sum([int(n) for n in row]) for row in numbers]))

这使用了一个叫做列表理解的东西,它基本上是一个创建列表的单行for循环。在

正如@jpp指出的print(sum([sum(map(int, row)) for row in numbers]))

它甚至更短,使用map函数将int强制转换应用于row的每个元素。在

不要强调这些是否令人困惑,重要的部分是学习如何debug your existing programs,这是所有关于一步一步评估你的假设和通过你的逻辑小块。当你有一个崩溃和一个打印的堆栈跟踪,这是很好的,它告诉你到底是什么地方出了问题,在哪里查找。如果这仍然不能使情况变得清楚,那么将代码简化到它可以正常工作并理解程序状态,然后重新构建。在

这里有一个repl来演示所有的有效解决方案。在

 类似资料: