为什么我的程序输出错误的最高数字?

时间:2017-06-17 12:54:16

标签: python arrays list max

当我运行此程序时,它表示最大数字比列表中的实际数字低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)

5 个答案:

答案 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)