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

2021-10-02 00:00:13 字數 1456 閱讀 9859

為了能夠找到元素在列表中的位置,我們通常會使用list.index()方法來元素的下標,但是這種方法有乙個弊端,就是當列表**現重複元素的時候,index方法只會返回第乙個元素的位置,**如下

a = ["a","b","c","a","d","a"]

print(a.index("a"))#輸出為0

通過上面的**可以發現,index方法的返回值是乙個整數,不存在是-1,這樣我們就沒辦法獲取多個下標的位置。當然你可以通過

移除列表中的元素,然後再去尋找下乙個元素的位置,當返回-1時結束。或者,你還可以通過結合字典來做這些都是可以的,這裡我要用乙個更簡單的方法,就是利用numpy的where和argwhere方法。

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函式就可以精確獲取元素的下標位置第乙個引數代表行第二個引數代表列

Python 修改列表中所有的元素

此段 迴圈了列表中的值 但是不會修改列表 an highlighted block def make great magicians for magician in magicians 每次迴圈拿到列表的的值進行賦值給magician magician the great magician 列印出m...

Python 列出列表中所有元素的組合可能

前言 看到乙個excel案例,比如有5個不同的產品,分別為a,b,c,d,e,需要列出所有可能的組合,因為每種產品存在 有 和 沒有 2種可能,所以總共就有2的5次方,也就是32種可能 excel的方法比較複雜,運用到了很多函式和公式,我就想用python該怎麼解決呢?本來想從頭設計,但發現原來內建...

找到字串中所有字母異位詞

給定乙個字串 s 和乙個非空字串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。字串只包含小寫英文本母,並且字串 s 和 p 的長度都不超過 20100。說明 字母異位詞指字母相同,但排列不同的字串。不考慮答案輸出的順序。示例 1 輸入 s cbaebabacd p abc...