0

ハードウェアの割り当てが完了したばかりですが、正しい出力を取得するためのはるかに簡単で効率的な方法があることを知っていると、かなり恐ろしいように見えますが、それを理解できないようです。これが課題の目的です。次の値を 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

2 次元リストの印刷は以下で行われました。私の問題は最大値と平均値を計算することです。

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

これは上半分を出力しますが、最大値と平均値を計算するために書いたコードは悪いです。最大の場合、基本的に列内のすべてのインデックスをif、elif、ステートメントで相互に比較し、平均については、各列のインデンシーを一緒に追加して平均してから出力しました。とにかく、ある種のループで一番下のものを計算することはありますか。次のようなものかもしれません

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() のみ使用できます。何か助けはありますか?

4

2 に答える 2

0

それぞれの行のサイズが同じである 2 つの新しいリストを作成し、1 つに現在の合計を保持し、2 つ目のリストに現在の最大値を保持することをお勧めします。

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,

enumerate 関数の使用が許可されている場合は、これをもう少しうまく行うことができます。

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
于 2013-09-30T03:34:53.857 に答える
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)
于 2013-09-30T03:39:02.333 に答える