为什么东西[:] [0]等于东西[0] [:]?

时间:2015-08-21 09:21:17

标签: python arrays

我正在尝试在我的Pyhton脚本中进行一个非常简单的检查,其中我有6000列但多个数组中只有3行数据。

为了对我的脚本正在做什么进行概述,我想在脚本的某些点添加一些检查,将我的数组的几列打印到我的linux终端窗口,并将其与手工计算进行比较,以确保我我没有在任何地方犯错误。

如果我打印:print(NH3flux[0][0])print(NH3flux[1][0]),我会收到正确的数据。

如果我做了print(NH3flux[0][:])我得到了我的第一行(如果你愿意,可以选择专栏)

问题:如果我做print(NH3flux[:][0])我得到与print(NH3flux[0][:])完全相同的结果,这让我感到困惑,因为我认为我理解Python中的数组?

如果我将我的:替换为数字012,我会收到正确的数据,3会因执行某些原因导致:崩溃{ {1}}符号不起作用。

我没理解什么?

编辑: 请注意,这些数字可能是字符串形式,因为它们是从数据库中读取的,因此尚未转换。这个对象的格式希望不是这里的问题。

print(NH3flux[0][0]) returns 0.00000

print(NH3flux[1][0]) returns 0.00001

print(NH3flux[2][0]) returns 0.00013

print(NH3flux[3][0]) returns list index out of range as expected

print(NH3flux[0][:]) returns '0.00000', '0.00000', '0.00003', '0.00002'

,......等

4 个答案:

答案 0 :(得分:4)

thing[:]会返回thing *。

的副本

NH3flux[:][0]为您提供NH3flux[0]相同的对象NH3flux[0][:]为您提供 NH3flux[0]的副本

NH3flux[:][0]看起来与NH3flux[0][:]相同的原因是因为当您print *时,对象看起来与其副本相同。

* 通常;适用于listtuple以及大多数其他想要遵守约定的内容。

答案 1 :(得分:1)

NH3flux[:]

选择所有列(假设您的矩阵是列表列表); NH3flux[:][0]这是第一行 - 你的第一行。

答案 2 :(得分:0)

print(NH3flux[0][:])选择第一个子元素/行并生成浅表副本,print(NH3flux[:][0])生成整个列表的浅表副本并从列表中选择第一行,这样您始终可以访问第一个子元素/列表中的一行。

In [7]: l = [[1,2],[2,3]]
In [8]: l[0] # first element
Out[8]: [1, 2]  
In [9]: l[:] # whole list
Out[9]: [[1, 2], [2, 3]]
In [10]: l[0][:] # copy of first row
Out[10]: [1, 2]    
In [11]: l[:][0] # shallow copy of whole list and getting first row
Out[11]: [1, 2]

答案 3 :(得分:0)

我不确定您使用的数据是什么,所以我只能假设。但是说你有类似的东西:
val = [1,2],print(val [:])
这会给你列表中的所有内容,现在如果你打印了(val [:] [ 1])只给你2号因为第一个[:]给你一切然后[1]给你列表中的第二个项目。
如果你做了一个像val = [1,2,[3,4]]这样的列表,那么打印(val [2] [:])就会给你3,4。这听起来像是在尝试打印超出数据类型范围的内容,但却不知道您正在尝试解析的数据。