Python &引用;列表索引必须是整数,而不是元组;但它以前有用吗?

Python &引用;列表索引必须是整数,而不是元组;但它以前有用吗?,python,Python,我有表格的2d列表: d = [[0.87768026489137663, -0.42848220833223599], [0.87770426313019434, -0.428411425505765], [0.87796388044104012, -0.42873867479872063], [0.87801587662514491, -0.42860583582101786], [0.87794315468933382, -0.42847396647067809]] 我想从中得到一个列,

我有表格的2d列表:

d = [[0.87768026489137663, -0.42848220833223599],
[0.87770426313019434, -0.428411425505765],
[0.87796388044104012, -0.42873867479872063],
[0.87801587662514491, -0.42860583582101786],
[0.87794315468933382, -0.42847396647067809]]

我想从中得到一个列,我以前在另一个程序上用d[:,0]或d[:,1]做过这件事,它工作得非常好。但现在当我尝试这样做时,我得到了一个错误:列表索引必须是整数,而不是元组。我知道这一定是一个非常简单的解决办法,但我只是不确定出了什么问题。如果有必要的话,我使用的是python 3.4。

在python中,您无法从矩阵中获得使用R表示法的列,您可以使用numpy lib。如果要使用纯python获取列
i
,只需执行以下操作:

columns   = map(list,zip(d))  
column_i  = columns [i] #i is the column that you want
范例

d = [[1,2],[3,4] ]
new_d = zip(d)
>> [(1,3),(2,4)]
map(list,new_d)
>> [[1,3],[2,4]]

你有一个列表。您要做的是遍历列表列表,对于每个子列表,如果您想要第一列,则选择第一项,如果您想要第二列,则选择第二项,以此类推。以下一行代码将完成此操作:

column = [x[0] for x in d]
请注意,
x[0]
选择子列表中的第一项。如果您想要第二项,请选择
x[1]
,等等。通常,如果您想要2d列表中的
n
th列(称之为
d
),则获取该列的代码为:

column = [x[n] for x in d]

在我看来,您将使用列表中的数据进行进一步计算。我最喜欢处理这些列表的是“numpy”。如果导入numpy模块,则可以像建议的那样访问数据:

import numpy as np

d = np.array([[0.87768026489137663, -0.42848220833223599],
              [0.87770426313019434, -0.428411425505765],
              [0.87796388044104012, -0.42873867479872063],
              [0.87801587662514491, -0.42860583582101786],
              [0.87794315468933382, -0.42847396647067809]])

d[:,1]
输出:

array([-0.42848221, -0.42841143, -0.42873867, -0.42860584, -0.42847397])
我发现对此类数据使用numpy要容易得多,因为它比列表理解更直观。
希望这有帮助。

@alfasin他想要的是列而不是行。我以前在另一个程序中使用
d[:,0]
d[:,1]
-这看起来像numpy,它有自己的功能。你的意思是在这里使用numpy而忘了包括它吗?谢谢你的快速回复,我实际上已经解决了这个问题。问题是我没有将其定义为numpy数组,我忘记了d[:,0]只适用于numpy数组。在与普通员工合作时,我会记住你说的话lists@Newb哦,对不起,你说得对,我将删除我的评论。@Newb只有一个问题,这是获取列
n
的低效方法,使用内置函数
zip
@levi效果更好。我对Python的内部机制不太了解,无法判断这是否比使用
zip
更有效——我直觉地认为
zip
也使用迭代,但我不知道。然而,我认为这个答案可能更适合新手,因为它很容易理解。@newb
zip
是一个在较低级别实现的内置函数,因为这样效率更高。是的,你的答案很容易理解,但是如果你使用的是投标数据集和矩阵,那么最好学习如何处理它以减少时间。谢谢你的快速回复,我实际上已经解决了这个问题。问题是我没有将其定义为numpy数组,我忘记了d[:,0]只适用于numpy数组。我会记住你在使用普通列表时说的话谢谢,我实际上在使用numpy,并且完全忘记了在使用该技术之前我需要将其转换为numpy数组!请注意:如果
d
tuple
,则需要更改名称:
d1=np.array(d)