元组索引的Python列表

4smxwvx5  于 2023-01-04  发布在  Python
关注(0)|答案(8)|浏览(166)

我是一个Matlab用户,需要使用Python做一些事情,如果有人能帮助我解决Python语法问题,我将非常感激:
(1)在Python中,列表可以用元组来索引吗?如果可以,我该怎么做呢?例如,我想用它来表示一个数据矩阵。
(2)假设我可以使用一个元组索引的列表,比如data [(row,col)],我如何删除整个列呢?我知道在Matlab中,我可以这样做

new_data = [data(:,1:x-1) data(:,x+1:end)];

如果我想从数据中删除x列。
(3)怎样才能很容易地计算出每一行中非负元素的个数呢?例如,在Matlab中,我可以这样做:

sum(data>=0,1)

这将给我一个列向量,它表示每行中非负条目的数量。
多谢了!

b91juud3

b91juud31#

你应该研究一下numpy,它就是为这类事情设计的。

u5i3ibmn

u5i3ibmn2#

1.不,但是字典可以。
1.听起来你想要一个“2维数组”,矩阵类型,或者其他什么。你看过numpy了吗?
1.这取决于你从#2中选择了什么,但是Python确实有sum和其他直接作用于可迭代对象的函数。看看gen-exprs(生成器表达式)和列表解析。例如:

row_count_of_non_neg = sum(1 for n in row if n >= 0)
# or:
row_count_of_non_neg = sum(n >= 0 for n in row)
# "abusing" True == 1 and False == 0
k3fezbri

k3fezbri3#

我同意每个人的观点。使用Numpy/Scipy。但这里有你问题的具体答案。
1.是的,索引可以是一个内置列表,也可以是一个Numpy数组,假设x = scipy.array([10, 11, 12, 13])y = scipy.array([0, 2]),那么x[[0, 2]]x[y]都返回相同的结果。

  1. new_data = scipy.delete(data, x, axis=0)
  2. (data>=0).sum(axis=1)
    注意:示例2说明了Numpy/Scipy的一个常见缺陷。如示例3所示,axis属性通常设置为0以沿着数组的第一维操作,设置为1以沿第二维操作,以此类推。但像delete这样的一些命令实际上颠倒了维的顺序,如示例2所示。您知道,行主要与列主要。
ojsjcaue

ojsjcaue4#

下面是一个如何在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是相当强大的。

eeq64g8w

eeq64g8w5#

可以通过重载内置列表的__getitem__和__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])
eanckbw9

eanckbw96#

(1)我不认为你可以用元组作为python list的索引。你可以用list of list(例如a[i][j]),但这似乎不是你的重点。你可以用一个关键字是元组的字典。

d = { (1,1):1, (2,1):2  ... }

(2)如果你不介意表演的话,

map( lambda x: d.remove(x) if x[1] = col_number, d.keys() )

(3)您也可以使用过滤器来执行此操作。

sum(
map( lambda x:x[1], filter(lambda x,y: x[1] == row_num and y > 0, d.items()))
)
klr1opcd

klr1opcd7#

不,列表不能用整数以外的任何东西来索引。但是,字典是另一种情况。字典是由键-值对组成的哈希表。键必须是唯一的和不可变的。值可以是任何类型的对象,包括整数、元组、列表或其他字典。对于您的示例,元组可以用作键,因为它们是不可变的。另一方面,列表不是,因此不能是字典键。
您所询问的一些功能可以作为字典和列表解析的组合来实现,而其他功能则需要对字典进行子类化并添加方法来实现您想要的功能。

5uzkadbs

5uzkadbs8#

使用原生python,您可以用途:

my_list = [0, 1, 2, 3]
index_tuple = (1,2)
x = [item for idx, item in enumerate(my_list) if idx in index_tuple]

相关问题