python中row是什么意思_Python中的2D列表
(rowtotalgrandtotal)
我认为⼀个接⼀个地分解你的尝试,并讨论每⼀个尝试中出现的问题是有指导意义的。在
对于初学者来说,您的输⼊列表是⼀个⼆维的数字列表。你需要把它们投给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 = 0crash是什么意思
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来演⽰所有的有效解决⽅案。在

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。