Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查Python中的多维列表_Python_List_Multidimensional Array - Fatal编程技术网

检查Python中的多维列表

检查Python中的多维列表,python,list,multidimensional-array,Python,List,Multidimensional Array,我有一些1维或2维的数据。我希望遍历数据集中的每个模式,并对其执行foo()。如果数据是1D,则将该值添加到列表中,如果是2D,则取内部列表的平均值并附加该值。 我看到了,并决定实现它,例如检查列表。我无法将numpy用于此应用程序 outputs = [] for row in data: if isinstance(row, list): vals = [foo(window) for window in row]

我有一些1维或2维的数据。我希望遍历数据集中的每个模式,并对其执行foo()。如果数据是1D,则将该值添加到列表中,如果是2D,则取内部列表的平均值并附加该值。 我看到了,并决定实现它,例如检查列表。我无法将numpy用于此应用程序

    outputs = []
    for row in data:
        if isinstance(row, list):
            vals = [foo(window) for window in row]
            outputs.append(sum(vals)/float(len(vals)))
        else:
            outputs.append(foo(row))

有没有更整洁的方法?在每次运行中,每个模式都具有相同的维度,因此我可以为1D/2D创建一个单独的类,但这将为我的代码添加很多类。数据集可能会变得相当大,因此最好采用快速解决方案。

您的代码已经尽可能地整洁和快速了。唯一的轻微改进是将
[foo(窗口)替换为行中窗口]
替换为
映射(foo,row)
,这可以通过基准测试看到:

> python -m timeit "foo = lambda x: x+1; list(map(foo, range(1000)))"
10000 loops, best of 3: 132 usec per loop
> python -m timeit "foo = lambda x: x+1; [foo(a) for a in range(1000)]"
10000 loops, best of 3: 140 usec per loop
isinstance()
似乎已经比其对应的
hasattr()
type()==
更快了:

> python -m timeit "[isinstance(i, int) for i in range(1000)]"
10000 loops, best of 3: 117 usec per loop
> python -m timeit "[hasattr(i, '__iter__') for i in range(1000)]"
1000 loops, best of 3: 470 usec per loop
> python -m timeit "[type(i) == int for i in range(1000)]"
10000 loops, best of 3: 130 usec per loop

但是,如果您认为简短整洁,也可以简化代码(替换
映射后)到:

mean=lambda x:sum(x)/float(len(x))#或python3.4中的“从统计数据导入平均值”
输出=[foo(r)if isinstance(r,int)else mean(map(foo,r))表示数据中的r]

我会检查hasattr(第[0]行,“'u iter_uuu')而不是isinstance(),但我认为没有更快或更优雅的方法。对meSee来说也很整洁。Python3.4(如果您有幸使用它)引入了@knitti
集合。应该改用Iterable
,而
\uu iter_uuu
对字符串无效。