在python中获取具有相同值的所有行?

在python中获取具有相同值的所有行?,python,arrays,numpy,matrix,Python,Arrays,Numpy,Matrix,因此,假设我在python中有这个2D数组 a = [[1,2] [2,3] [3,2] [1,3]] 如何获取具有相同行值的所有数组项并将它们存储在新矩阵中。 例如,我将 b = [1,2] [1,3] 在查询之后 如果a[i][0]==1][0]] 但它似乎不起作用 我是Python新手,整个索引切片的事情有点让人困惑。谢谢 由于已标记,因此可以使用NumPy数组执行此任务。首先定义数组: a = np.array([[1, 2],

因此,假设我在python中有这个2D数组

a = [[1,2]
     [2,3]
     [3,2]
     [1,3]]
如何获取具有相同行值的所有数组项并将它们存储在新矩阵中。 例如,我将

b = [1,2]
    [1,3]
在查询之后

如果a[i][0]==1][0]] 但它似乎不起作用

我是Python新手,整个索引切片的事情有点让人困惑。谢谢

由于已标记,因此可以使用NumPy数组执行此任务。首先定义数组:

a = np.array([[1, 2],
              [2, 3],
              [3, 2],
              [1, 3]])
对于第一列中的所有唯一值,可以使用字典理解。这有助于避免重复操作

d = {i: a[a[:, 0] == i] for i in np.unique(a[:, 0])}

{1: array([[1, 2],
           [1, 3]]),
 2: array([[2, 3]]),
 3: array([[3, 2]])}
然后通过
d[1]
访问第一列等于1的数组


对于单个查询,您可以简单地使用
a[a[:,0]==1]

a语法中的
For i为您提供列表中的实际项目。例如:

list_of_strs = ['first', 'second', 'third']
first_letters = [s[0] for s in list_of_strs]
# first_letters == ['f', 's', 't']
如果a[i][0]==1]
试图用a的每个元素为a的一个元素建立索引,那么实际使用a中i的
b=[a[i]所做的是什么。但是,由于
的每个元素本身就是一个列表,这将不起作用(不能将列表与其他列表一起索引)

像这样的方法应该会奏效:

b = [row for row in a if row[0] == 1]
如果你把它写成一个函数,这样你就可以选择你想要过滤的东西了

如果您经常使用阵列,还可以查看。有了numpy,你可以做这样的事情

import numpy as np
a = np.array([[1,2], [2,3], [3,2], [1,3]])
b = a[a[:,0] == 1]

最后一行基本上是索引原始数组
a
,在第一组方括号内定义一个布尔数组。它非常灵活,所以你也可以修改它,在第二个元素上进行过滤,在其他条件下进行过滤(如
>some_number
),等等。

b=[x为x,如果x[0]==1]
谢谢,它对我有用!但是我想知道是否有更简单的方法来访问元素?@JimmyW,你真的需要定义
simpler
。据我所知,没有比
a[a[:,0]==1]
更简单的方法了。