我有一个新任务我刚刚完成,但它看起来非常可怕,知道这是一个更简单有效的方式来获得正确的输出,但我似乎无法弄明白。 这是作业的目标。 编写一个程序,将以下值存储在2D列表中(这些将是硬编码的):
2.42 11.42 13.86 72.32
56.59 88.52 4.33 87.70
73.72 50.50 7.97 84.47
程序应确定每列的最大值和平均值
输出看起来像
2.42 11.42 13.86 72.32
56.59 88.52 4.33 87.70
73.72 50.50 7.97 84.47
============================
73.72 88.52 13.86 87.70 column max
44.24 50.15 8.72 81.50 column average
下面列出了2d列表的打印,我的问题是计算最大值和平均值。
data = [ [ 2.42, 11.42, 13.86, 72.32],
[ 56.59, 88.52, 4.33, 87.70],
[ 73.72, 50.50, 7.97, 84.47] ]
emptylist = []
r = 0
while r < 3:
c = 0
while c < 4 :
print "%5.2f" % data[r][c] ,
c = c + 1
r = r + 1
print
print "=" * 25
打印上半部分,但我编写的代码用来计算最大值和平均值是不好的。对于max我基本上用if,elif,语句将列中的所有索引相互映射,并且对于平均值我将每列的indency一起添加并平均,然后打印。无论如何都要用某种循环来计算底部的东西。可能类似于以下
for numbers in data:
r = 0 #row index
c = 0 #column index
emptylist= []
while c < 4 :
while r < 3 :
sum = data[r][c]
totalsum = totalsum + sum
avg = totalsum / float(rows)
emptylist.append(avg) #not sure if this would work? here im just trying to
r = r + 1 #dump averages into an emptylist to print the values
c = c + 1 #in it later?
或类似的东西,我不是手动将每个索引号添加到每个列和行。最大的一个我不知道如何在循环中做。也可以使用NO LIST METHODS。只有append和len()可以使用。有什么帮助吗?
答案 0 :(得分:0)
我建议制作两个新列表,每个列的行数相同,并保持一个运行总和,第二个运行最大值:
maxes = [0] * 4 # equivalent to [0, 0, 0, 0]
avgs = [0] * 4
for row in data: # this gives one row at a time
for c in range(4): # equivalent to for c in [0,1,2,3]:
#first, check if the max is big enough:
if row[c] > maxes[c]:
maxes[c] = row[c]
# next, add that value to the sum:
avgs[c] += row[c]/4.
您可以这样打印:
for m in maxes:
print "%5.2f" % m,
for s in sums:
print "%5.2f" % s,
如果允许使用枚举函数,可以更好地完成:
for i, val in enumerate(row):
print i, val
0 2.42
1 11.42
2 13.86
3 72.32
因此它为我们提供了值和索引,因此我们可以像这样使用它:
maxes = [0] * 4
sums = [0] * 4
for row in data:
for c, val in enumerate(row):
#first, check if the max is big enough:
if val > maxes[c]:
maxes[c] = val
# next, add that value to the sum:
sums[c] += val
答案 1 :(得分:0)
以下是您要找的内容:
num_rows = len(data)
num_cols = len(data[0])
max_values = [0]*num_cols # Assuming the numbers in the array are all positive
avg_values = [0]*num_cols
for row_data in data:
for col_idx, col_data in enumerate(row):
max_values[col_idx] = max(max_values[col_idx],col_data) # Max of two values
avg_values[col_idx] += col_data
for i in range(num_cols):
avg_values[i] /= num_rows
然后max_values
将包含每列的最大值,而avg_values
将包含每列的平均值。然后你可以像往常一样打印它:
for num in max_values:
print num,
print
for num in avg_values:
print num
或简单地(如果允许):
print ' '.join(max_values)
print ' '.join(avg_values)