我有以下元组列表:
[(2010, u'S03', u'AA26FedGovAccounts', 1.90537034315564, 46385659904.0), (2010, u'S03', u'AA27StLocGovAccounts', 1.5897291595379, 58351759360.0), (2010, u'S03', u'AA28CapitalAccounts', 1.79050465110027, 95550709760.0)]
当我使用:viewData[:][:]
时,它按预期工作并输出所有数据
当我使用:viewData[2][2]
时,它正常工作并输出'AA28CapitalAccounts'
问题是viewData[2][:]
和viewData[:][2]
都给了我相同的结果:(2010, u'S03', u'AA28CapitalAccounts', 1.79050465110027, 95550709760.0)
。我希望viewData[:][2]
能够为我提供u'AA26FedGovAccounts'
,u'AA27StLocGovAccounts'
和u'AA28CapitalAccounts'
的列表。
这是使用Django在网络服务器上运行的。代码是:
c = connections['default'].cursor()
c.execute("SELECT * FROM {0}.\"{1}\"".format(analysis_schema, viewName))
viewData=c.fetchall()
values = { curDesc[2][0] : str(viewData[:][2]) }
答案 0 :(得分:1)
对于viewData [2] [:]
viewData[2]
返回外部列表中的第三个元素:
(2010, u'S03', u'AA28CapitalAccounts', 1.79050465110027, 95550709760.0)
然后[:]
部分返回所有元组:
适用于viewData [:] [2]
viewData[:]
返回整个外部列表
然后[2]
部分返回第三个元素:
(2010, u'S03', u'AA28CapitalAccounts', 1.79050465110027, 95550709760.0)
与其他方法相同。
由于[:]
返回一个包含每个元素的列表,因此您实际上并没有关闭任何内容,只是获取与以前相同的列表。
Here关于Python的切片符号是一个有用的一般性问题。
答案 1 :(得分:1)
他们两个显然会返回相同的值。
viewData [:] [2]不会给出'AA26FedGovAccounts','AA27StLocGovAccounts'和'AA28CapitalAccounts'的列表,而是需要迭代列表。 @iwin很好地解释了原因。
以下代码是您所需要的:
[item[2] for item in viewData]
答案 2 :(得分:0)
我认为你缺少numpy
数组的列表。
如果所有子列表的大小相同,则可以将列表转换为数组:
>>> import numpy as np
>>> tmp = [(2010, u'S03', u'AA26FedGovAccounts', 1.90537034315564, 46385659904.0),
(2010, u'S03', u'AA27StLocGovAccounts', 1.5897291595379, 58351759360.0),
(2010, u'S03', u'AA28CapitalAccounts', 1.79050465110027, 95550709760.0)]
>>> viewData = np.array(tmp)
# Column-wise
>>> print viewData[:, 2]
[u'AA26FedGovAccounts' u'AA27StLocGovAccounts' u'AA28CapitalAccounts']
# Row-wise
>>> print viewData[2, :] # same as print viewData[2]
[u'2010' u'S03' u'AA28CapitalAccounts' u'1.7905046511' u'95550709760.0']
请注意语法:viewData[:, 2]
而非viewData[:][2]