Python快速找到列表中所有重复的元素

index方法

为了能够找到元素在列表中的位置,我们通常会使用list.index()方法来元素的下标,但是这种方法有一个弊端,就是当列表中出现重复元素的时候,index方法只会返回第一个元素的位置,代码如下

a = ["a","b","c","a","d","a"]
print(a.index("a"))#输出为0

通过上面的代码可以发现,index方法的返回值是一个整数,不存在是-1,这样我们就没办法获取多个下标的位置。当然你可以通过

移除列表中的元素,然后再去寻找下一个元素的位置,当返回-1时结束。或者,你还可以通过结合字典来做这些都是可以的,这里我要用一个更简单的方法,就是利用numpy的where和argwhere方法。

where方法

numpy提供了一个where方法,返回的是一个元组,里面包含了一个数组,数组中包含了符合条件元素的下标

import numpy as np

#将列表转换为numpy的数组
a = np.array(["a","b","c","a","d","a"])
#获取元素的下标位置
eq_letter = np.where(a == "a")
print(eq_letter[0])#[0 3 5]

argwhere方法

argwhere方法可以用来获取多维数组中元素的下标位置

import numpy as np

#将列表转换为numpy的数组
a = np.array([["a","b","c"],["a","d","a"]])
#获取元素的下标位置
eq_letter = np.where(a == "a")
print(eq_letter[0])#[0 1 1]

对于多维数组来说,使用where函数只能获取到元素出现的函数,无法获取到准确的下标位置,因为多维数组的下标需要多个数字来定位

import numpy as np

#将列表转换为numpy的数组
a = np.array([["a","b","c"],["a","d","a"]])
#获取元素的下标位置
eq_letter = np.argwhere(a == "a")
print(eq_letter)
"""
[[0 0]
 [1 0]
 [1 2]]
"""

通过argwhere函数就可以精确获取元素的下标位置第一个参数代表行第二个参数代表列

你可能感兴趣的:(numpy修炼之路)