我正在尝试在我的Pyhton脚本中进行一个非常简单的检查,其中我有6000列但多个数组中只有3行数据。
为了对我的脚本正在做什么进行概述,我想在脚本的某些点添加一些检查,将我的数组的几列打印到我的linux终端窗口,并将其与手工计算进行比较,以确保我我没有在任何地方犯错误。
如果我打印:print(NH3flux[0][0])
或print(NH3flux[1][0])
,我会收到正确的数据。
如果我做了print(NH3flux[0][:])
我得到了我的第一行(如果你愿意,可以选择专栏)
问题:如果我做print(NH3flux[:][0])
我得到与print(NH3flux[0][:])
完全相同的结果,这让我感到困惑,因为我认为我理解Python中的数组?
如果我将我的:
替换为数字0
,1
或2
,我会收到正确的数据,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'
,......等
答案 0 :(得分:4)
thing[:]
会返回thing
*。
NH3flux[:][0]
为您提供与NH3flux[0]
相同的对象,NH3flux[0][:]
为您提供 NH3flux[0]
的副本
NH3flux[:][0]
看起来与NH3flux[0][:]
相同的原因是因为当您print
*时,对象看起来与其副本相同。
* 通常;适用于list
和tuple
以及大多数其他想要遵守约定的内容。
答案 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。这听起来像是在尝试打印超出数据类型范围的内容,但却不知道您正在尝试解析的数据。