Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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_Arrays - Fatal编程技术网

Python:在多维数组中访问列值

Python:在多维数组中访问列值,python,arrays,Python,Arrays,例如: a = [[1,2,3],[4,5,6],[7,8,9]] 通过执行类似于[:][0]的操作,我希望它在每行[1,4,7]中为我提供第一个元素 但是,我得到[1,2,3]。我总是可以做一个函数来做它 def column(array,index): result = [] for row in array: result.append(row[index]) return result 但我想知道:有没有更聪明的方法呢?以这种方式操纵阵列的事实

例如:

a = [[1,2,3],[4,5,6],[7,8,9]]
通过执行类似于[:][0]的操作,我希望它在每行[1,4,7]中为我提供第一个元素

但是,我得到[1,2,3]。我总是可以做一个函数来做它

def column(array,index):
    result = []
    for row in array:
        result.append(row[index])
    return result

但我想知道:有没有更聪明的方法呢?

以这种方式操纵阵列的事实上的标准方法是使用专用软件包

使用NumPy,一切按您所希望的方式运行:

>>> import numpy
>>> a = numpy.array([[1,2,3],[4,5,6],[7,8,9]])
>>> a[:,0]
array([1, 4, 7])

事实上,NumPy的目的是提供强大的数组操作。

稍微理解一下列表就可以了:

a = [[1,2,3],[4,5,6],[7,8,9]]
col = [c[0] for c in a]

不知道速度的含义。

您也可以使用单线循环,但它与您已经做的相同:

a = [[1,2,3],[4,5,6],[7,8,9]]
result = [item[0] for item in a]
a[:][0]不工作,因为a的a[:]无效。[0]然后从该副本获取第一个值,即[1,2,3]

相反,请使用:

使用zip:


但是请注意,zip构建元组,这可能需要您根据应用程序将其转换回列表。

这称为列表理解。请注意,与列表理解不同,您在这里创建了N个数组。并不是每个人都知道zip的功能,但它要小得多:。更具体地说,zip构建的是一个元组列表,而不是一个元组的元组列表,或者Python 3上的元组迭代器。@Russel:谢谢,这正是我想要的。@Russell Borogove:我强烈建议不要使用这种解决方案:提取第一个元素时,zip会使您的操作变得模糊,这意味着对于大多数Python程序员来说,程序确实需要保留所有原始数据,但结构不同;这实际上是在浪费内存和执行时间。此外,这在Python3中不起作用,因为zip的结果在Python3中是一个生成器,因此需要listzip*a[0]。列表理解方法是非常明确和标准的。@JamesAntill,@EOL-在性能方面你是对的,但问题的措辞在我看来似乎更广泛地使用zip进行转置可能很方便。强制性地图版本:mapoperator.itemgetter0,a.@agf:这就是我喜欢Python的原因。做这件事的方法总是不止一种@史蒂文·伦巴尔斯基:……那么你可能会更喜欢Perl从Python的Zen导入:应该有一种——最好只有一种——显而易见的方法来实现它。是的,我知道numpy,但我想避免使用加法库。很高兴认识你。就Python而言,这实际上相当快。通常更快的选择是使用NumPy。
a = [[1,2,3],[4,5,6],[7,8,9]]
col = [row[0] for row in a] # => [1,4,7]
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> zip(*a)
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
>>> zip(*a)[0]
(1, 4, 7)