当前位置: 代码迷 >> python >> 获取所有在python中具有相同值的行?
  详细解决方案

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

热度:104   发布时间:2023-06-21 10:57:15.0

所以,假设我在python中有这个2D数组

a = [[1,2]
     [2,3]
     [3,2]
     [1,3]]

如何获得具有相同行值的所有数组条目并将它们存储在新矩阵中。 例如,我将有

b = [1,2]
    [1,3]

查询后。

我的方法是b = [a[i] for i in a if 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]

语法中的for i in a会为您提供列表中的实际项目。.so例如:

list_of_strs = ['first', 'second', 'third']
first_letters = [s[0] for s in list_of_strs]
# first_letters == ['f', 's', 't']

b = [a[i] for i in a if a[i][0]==1]试图用a的每个元素索引a的元素,则您实际上对b = [a[i] for i in a if a[i][0]==1]的操作。 但是,由于每个元素a是本身的列表,这是不行的(你不能与其他列表索引列表)

这样的事情应该起作用:

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使用在第一组方括号内定义的布尔数组来索引原始数组a 它非常灵活,因此您也可以修改它以在第二个元素上进行过滤,在其他条件下进行过滤(例如> some_number ),等等。