使用Sqlite,“select..from”命令返回结果“output”,其打印(在python中):
>>print output
[(12.2817, 12.2817), (0, 0), (8.52, 8.52)]
它似乎是一个元组列表 . 我想在一个简单的1D数组中转换“输出”(我猜的是Python中的列表):
[12.2817, 12.2817, 0, 0, 8.52, 8.52]
或2x3矩阵:
12.2817 12.2817
0 0
8.52 8.52
通过“output [i] [j]”读取
flatten命令不能完成第一个选项的工作,我不知道第二个选项...... :)
你能给我一个提示吗?有些事情很快就会很好,因为真正的数据要大得多(这里只是一个简单的例子) .
9 回答
到目前为止,发布的最快(和最短)解决方案:
比
itertools
解决方案快约50%,比map
解决方案快约70% .在Python 3中,您可以使用
*
语法来展平迭代列表:列表理解方法适用于Iterable类型,并且比此处显示的其他方法更快 .
l
是要变平的列表(在OP的情况下称为output
)timeit测试:
列表理解
timeit结果=每循环7.67μs±129 ns
列出extend()方法
timeit结果=每循环11μs±433 ns
sum()
timeit结果=每个循环24.2μs±269 ns
使用
itertools
链:或者您可以像这样展平列表:
另一个选项比大数组的sum选项更快:
用map / extend展平:
使用列表理解而不是 Map 展平(更快)
Update :使用extend展平但不理解且不使用列表作为迭代器(最快)
在检查下一个答案后,通过列表理解提供了更快的解决方案
dual for
我做了一点调整,现在它表现得更好,首先执行list(...)拖动了很大一部分时间,然后更改了列表理解为一个简单的循环也削减了一点 . 最终的解决方案是:通过删除[...]的列表(...)来获得新的扩展和改进的一些时间:
您可以轻松地从元组列表移动到单个列表,如上所示 .
在任意嵌套列表的情况下(以防万一):
这就是
numpy
的用途,包括数据结构和速度方面 .