我有一个变量compareout
,它存储嵌套的数据列表:
compareout = [...
[Guyana,951.723423,1037.123424,28.476757,2.991234],
[Bolivia,936.123420,1065.8234236,43.25123,4.62],
[Philippines,925.52342342,1119.62342341,64.70234234,6.991234123],
[Congo (Rep.),907.22342343,1657.52342349,250.1242342,27.571234123],
...]
我想:
但是,我需要格式化输出,使所有的浮点值都只有2位小数,并在第二列和第三列值的前面加上一个“%”符号。虽然我可以迭代“compareout”并替换最后两个列,就像这样。。。在
^{pr2}$我不能做一些简单的事情,比如:
for line in ascending:
line[1] = "USD %.2f" % line[1]
line[2] = "USD %.2f" % line[2]
因为这不允许排序。目前,在我第一次排序并将数据写入第一个文件后,我就有了上面的代码,但是我当然不能按降序排序…我也很困惑如何指定只写10个项目。。。在
我在谷歌上搜索了大约一个小时,似乎找不到足够的信息来确定csv.writerow()函数允许在写作时格式化,我已经用尽办法了。如果有人能给我一些想法,我将非常感激。。。在
考虑创建两个不同的列表对象;对它们进行相应的排序,然后分别将每行writerow()放入csv文件中
按列排序(例如,按1.0项排序)运算符.itemgetter()
尝试在上面的sorted()函数中添加reverse=True进行降序排序
因为您只想为每个输出文件writerow()10个项,请检查csvreader.line_号或者使用csvreader循环。next()
您可以编写一个
format
函数,从列表中获取一个项并返回格式化的行。比如:之后,您可以:
^{pr2}$请注意,在
compareout
列表上调用两次sorted
将花费两倍的时间,而使用sorted_values[-10:][::-1]
需要固定的时间,因此效率更高。如果您还想使用两种类型,我建议您执行以下操作:例如,对已经排序的值调用
.sort
。当处理部分排序的数据时,列表的排序算法非常聪明,因此上面的代码将对第一个排序使用O(nlogn)
,而第二个代码只使用O(n)
:(在这个简单的例子中,您可以使用
reversed(L)
,但在其他情况下这是不可能的)。在相关问题 更多 >
编程相关推荐