0

私は大きなリストを持っており、一連のIDと関連する値が含まれています.非常に短縮されたバージョンは次のようになります:

large = [('5501', [(4, 5, 8), (6, -4, -6)]), ('2222', [(2, 4, -5), (1, -15, 4)])]

私の目標は、変更されたバージョンの「ラージ」(追加あり) を Excel にエクスポートすることです(すべての値が独自の個別のセルに含まれています。つまり、5501 は A1 に、4 は A2 に、5 は B2 に、8 は C2 に...最初のスペース) A4などになります)は次のようになります。

EXCELに出力された希望のフォーム

5501 
4,5,8 
6,-4,-6
'space here'
'Sorted absolutes maxes'
8, 6, 5
'space here'     
2222 
2,4,-5 
1,-15,4
'space here'
'Sorted absolutes maxes'
15, 5, 2
'space here' 

次のコードを使用して、上記の目的のフォームをエクスポートできました。

import csv
with open("out1.csv", "wb") as fp: 
   writer = csv.writer(fp, delimiter=",")     
   for entry in large:        
       writer.writerow([entry[0]])         
       for line in entry[1]:             
           writer.writerow(line)        
       writer.writerow([])

ただし、上記の必要な形式 のように、必要な並べ替えられた絶対値 (つまり、「-」記号を無視する) の最大値が含まれていません。これは私が助けを必要とするところです-助けていただければ幸いです。

4

1 に答える 1

2

absまず、タプルを次のようにマッピングすることで絶対値を取得できます

map(abs, entry[1][0]) 
map(abs, entry[1][1]) 

次に、最初に zip を使用して位置ペアを作成することにより、ペアごとの最大値を取得できます

zip(map(abs, entry[1][0]), map(abs, entry[1][1]))

次に、これらのペアをそれぞれの最大値に再度マッピングします。

map(max, zip(map(abs, entry[1][0]), map(abs, entry[1][1])))

あとは、それらを最大から最小に並べ替えて、ファイルに書き込むだけです。

with open("out1.csv", "wb") as fp: 
   writer = csv.writer(fp, delimiter=",")     
   for entry in large:        
       writer.writerow([entry[0]])         
       for line in entry[1]:             
           writer.writerow(line)        
       writer.writerow([])
       writer.writerow(['Sorted absolute maxes'])
       maxima = map(max, zip(map(abs, entry[1][0]), map(abs, entry[1][1])) )
       writer.writerow(sorted(maxima, reverse=True))
       writer.writerow([])

これにより、次の出力が得られます。

5501
4,5,8
6,-4,-6

Sorted absolute maxes
8,6,5

2222
2,4,-5
1,-15,4

Sorted absolute maxes
15,5,2
于 2012-08-15T11:57:09.550 に答える