当我运行此程序时,它表示最大数字比列表中的实际数字低1位数。例如,我运行下面的代码,它告诉我当列表中的92为最大数字时为91。
examMarks = [[80, 59, 34, 89], [31, 11, 47, 64], [29, 56, 13, 92]]
for eachRow in range(len(examMarks)):
for eachColumn in range(len(examMarks[eachRow])):
eachExamMark = (examMarks[eachRow][eachColumn])
max = -100
for everyMark in range(eachExamMark):
if everyMark > max:
max = everyMark
print(max)
答案 0 :(得分:3)
我没有看到3个循环的原因是诚实的,你尝试过类似的东西吗?
examMarks = [[80, 59, 34, 89], [31, 11, 47, 64], [29, 56, 13, 92]]
highest = 0
for marks in examMarks:
for mark in marks:
highest = max(mark, highest)
print('Highest mark: %d' % highest)
答案 1 :(得分:2)
您应该尝试使用此代码!
.form-control {
meh !important;
meh !important;
}
答案 2 :(得分:1)
eachExamMark
将设置为(92)
,即92
,作为程序第一部分的最后一步。如果您对range(92)
执行for循环,则会以91
结束。
你至少应该这样做:
print(eachExamMark)
在max = -100
行之前。
您可能想要这样做:
eachExamMark.append(examMarks[eachRow][eachColumn])
在开头定义eachExamMark = []
之后。
我不确定您是否必须以这种方式解决问题,但恕我直言,您不应该使用range()
,也不需要构建扁平列表。
你可以,例如做:
examMarks = [[80, 59, 34, 89], [31, 11, 47, 64], [29, 56, 13, 92]]
print(max(max(x) for x in examMarks))
答案 3 :(得分:0)
正如其他人指出的那样,问题是最后一个循环是执行一个数字的范围,而不是你期望的列表。
另一种算法:
examMarks = [[80, 59, 34, 89], [31, 11, 47, 64], [29, 56, 13, 12]]
eachExamMark =[]
for eachRow in range(len(examMarks)):
for eachColumn in range(len(examMarks[eachRow])):
eachExamMark.append(examMarks[eachRow][eachColumn])
max = -100
for everyMark in eachExamMark:
if everyMark > max:
max = everyMark
print(max)
from itertools import chain
examMarks = [[80, 59, 34, 89], [31, 11, 47, 64], [29, 56, 13, 92]]
print(max(chain.from_iterable(examMarks)))
将列表展平为迭代器
chain.from_iterable(examMarks)
找到列表中的最大数量
注意:我的原始答案使用max()
来压缩列表。感谢@John Coleman对更快解决方案的评论。
答案 4 :(得分:0)
试试这个:
examMarks = [[80, 59, 34, 89], [31, 11, 47, 64], [29, 56, 13, 12]]
eachExamMark =[]
for eachRow in examMarks:
eachExamMark.append(max(eachRow))
print max(eachExamMark)