Python快速找到列表中所有重复的元素:https://blog.csdn.net/sinat_29957455/article/details/103886088
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方法
import numpy as np
#将列表转换为numpy的数组
a = np.array([["a","b","c"],["a","d","a"]])
#获取元素的下标位置
eq_letter = np.where(a == "a")
print(eq_letter)#(array([0, 1, 1]), array([0, 0, 2]))
对于多维数组来说,使用where函数返回的是一个元祖,对于二维数组来说元祖的一个数组表示的是行索引第二个数组表示的是列索引,而argwhere返回的是一个数组,如果将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函数就可以精确获取元素的下标位置,第一个参数代表行,第二个参数代表列