首页 > 解决方案 > 我不知道为什么我会为每个匹配的子列表获得重复的索引

问题描述

我试图做的是采取最快的路线来标记特定超级列表中子列表的每个索引。

import numpy as np

l1 = [['a', 'b'], ['c', 'd'], ['a', 'b'], ['a', 'b']]
l2 = ['a', 'b']
a = np.array(l1)
b = np.array(l2)

x = np.where(a == b)[0]
print(x)

输出:

[0 0 2 2 3 3]

标签: pythonnumpy

解决方案


因为你只得到输出的第一个元素[0]a是 2D 数组,输出有 2 个索引“用于行和列位置”

import numpy as np

l1 = [['a', 'b'], ['c', 'd'], ['a', 'b'], ['a', 'b']]
l2 = ['a', 'b']
a = np.array(l1)
b = np.array(l2)

x,y = np.where(a == b)
a[x,y]
array(['a', 'b', 'a', 'b', 'a', 'b'], dtype='<U1')

如果您希望以数组方式比较它们,您应该循环遍历a

x = np.where([np.array_equal(i,b) for i in a])[0]
x
array([0, 2, 3], dtype=int64)

推荐阅读