元组索引的Python列表
我是一名Matlab用户,需要在某些方面使用Python,如果有人能帮助我使用Python语法,我将不胜感激: (1) 在Python中,列表可以通过元组进行索引,这是真的吗?如果是,我该怎么做?例如,我想用它来表示一个数据矩阵 (2) 假设我可以使用元组索引的列表,比如数据[(行,列)],如何删除整个列?我知道在Matlab中,我可以做如下事情元组索引的Python列表,python,list,matlab,list-comprehension,Python,List,Matlab,List Comprehension,我是一名Matlab用户,需要在某些方面使用Python,如果有人能帮助我使用Python语法,我将不胜感激: (1) 在Python中,列表可以通过元组进行索引,这是真的吗?如果是,我该怎么做?例如,我想用它来表示一个数据矩阵 (2) 假设我可以使用元组索引的列表,比如数据[(行,列)],如何删除整个列?我知道在Matlab中,我可以做如下事情 new_data = [data(:,1:x-1) data(:,x+1:end)]; 如果我想从数据中删除x列 (3) 如何轻松计算每行中非负元
new_data = [data(:,1:x-1) data(:,x+1:end)];
如果我想从数据中删除x列
(3) 如何轻松计算每行中非负元素的数量。例如,在Matlab中,我可以这样做:
sum(data>=0,1)
这将给我一个列向量,它表示每行中非负条目的数量
非常感谢 你应该调查一下,它就是为这类事情而设计的
d = { (1,1):1, (2,1):2 ... }
(二)
如果你不介意表演的话
map( lambda x: d.remove(x) if x[1] = col_number, d.keys() )
(三)
您也可以使用过滤器来实现这一点
sum(
map( lambda x:x[1], filter(lambda x,y: x[1] == row_num and y > 0, d.items()))
)
不,列表不能用整数以外的任何东西编制索引。然而,字典是另一种情况。字典是由键值对组成的哈希表。密钥必须是唯一且不可变的。该值可以是任何类型的对象,包括整数、元组、列表或其他字典。例如,元组可以用作键,因为它们是不可变的。另一方面,列表不是,因此不能是字典键
您所问的一些功能可以作为字典和列表理解的组合来实现。其他人则需要对字典进行子类化并添加方法来实现所需的功能。下面是一个如何在numpy中轻松创建数组(矩阵)的示例:
>>> import numpy
>>> a = numpy.array([[1,2,3],[4,5,6],[7,8,9]])
下面是它的显示方式
>>> a
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
以及如何获取行或列:
>>> a[0,:]
array([1, 2, 3])
>>> a[:,0]
array([1, 4, 7])
希望示例中的语法清晰!Numpy相当强大。我同意大家的看法。使用Numpy/Scipy。但以下是对你的问题的具体回答
x=scipy.array([10,11,12,13])
和y=scipy.array([0,2])
。然后x[[0,2]]
和x[y]
都返回相同的内容new\u data=scipy.delete(数据,x,轴=0)
(数据>=0)。总和(轴=1)
小心:示例2说明了Numpy/Scipy的一个常见陷阱。如例3所示,
axis
属性通常设置为0以沿数组的第一维操作,1以沿第二维操作,依此类推。但是一些命令,如delete
实际上颠倒了维度的顺序,如示例2所示。您知道,行主项与列主项。您可以通过重载内置列表的u getitem和u setitem方法来扩展列表功能,以允许使用元组进行索引。请尝试以下代码:
class my_list(list):
def __getitem__(self, key):
if isinstance(key, tuple) and len(key) > 0:
temp = []
for k in key: temp.append(list.__getitem__(self, k))
return temp
else:
return list.__getitem__(self, key)
def __setitem__(self, key, data):
if isinstance(key, tuple) and len(key) > 0:
for k in key: list.__setitem__(self, k, data)
else:
list.__setitem__(self, key, data)
if __name__ == '__main__':
L = my_list([1, 2, 3, 4, 5])
T = (1,3)
print(L[T])
numpy将使用与matlab几乎完全相同的语法来处理问题中的所有问题。numpy数组是一个不错的选择。我建议使用此页面来帮助简化转换—我不知道它是否有助于找到等效的Python操作,但是从矩阵中删除整个列也可以使用语法
data(:,x)=[]谢谢大家!NumPy/SciPy正是我所需要的。语法非常接近Matlab。再次感谢你的帮助,我真的很感激!!!这不是很棒吗?如果您是Matlab用户,那么您会发现ipython与Numpy/Scipy一起绝对不可或缺。在我看来,面向对象,例如(data>=0).sum()或data.size或data.shape(),使得Numpy/Scipy甚至比Matlab更好。将map或filter与lambdas相结合,与生成器表达式相比是很尴尬的:sum(y代表x,y代表d.items(),如果x[1]==row_num和y>0)
(应该与您的代码等效,但您的代码似乎有bug)。
class my_list(list):
def __getitem__(self, key):
if isinstance(key, tuple) and len(key) > 0:
temp = []
for k in key: temp.append(list.__getitem__(self, k))
return temp
else:
return list.__getitem__(self, key)
def __setitem__(self, key, data):
if isinstance(key, tuple) and len(key) > 0:
for k in key: list.__setitem__(self, k, data)
else:
list.__setitem__(self, key, data)
if __name__ == '__main__':
L = my_list([1, 2, 3, 4, 5])
T = (1,3)
print(L[T])