0

我有一个大列表,包含一系列 id 和相关值,极短的版本如下所示:

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

我的目标是将修改后的“大”(带有添加)版本导出到 Excel (每个值都有自己的单独单元格 - 即 5501 在 A1 中,在 A2 中为 4,在 B2 中为 5,在 C2 中为 8...第一个空格将在 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 回答