如何在 Python 中查詢列表中的重複資料
本教程將介紹如何在 Python 中查詢列表中的重複內容。
使用 set()
函式刪除 Python 列表中的重複內容
Python set()
是一個將列表轉換為集合的函式。根據對集合和列表的描述,將一個列表轉換為集合意味著刪除列表中所有重複的元素。
然而,我們想要的是搜尋列表中重複項。要做到這一點,我們仍然使用 set()
函式,但我們只包括那些在列表中擁有多個元素的元素,這意味著它們是有重複的元素。
- 宣告一個函式,在一個列表中尋找重複的元素,並將它們儲存為一個集合。
def listToSet(listNums):
set([num for num in listNums if listNums.count(x) > 1])
- 另一種方法,如果你想把結果保留為一個列表而不是一個集合,則使用
set()
和add()
在列表中尋找重複的元素,並在返回時重新將其轉換為一個列表。
def list_duplicates(listNums):
once = set()
seenOnce = once.add
twice = set(num for num in listNums if num in once or seenOnce(x))
return list(twice)
如果這個數字是第一次出現,並且在集合 once
內不存在,那麼這個函式就會把元素新增到 once
中。
兩個函式將返回相同的輸出,儘管一個是集合,另一個是列表。結果將輸出 listNums
中所有重複的元素。
[1, 3, 5, 8]
使用 iteration_utils
模組來查詢 Python 列表中的重複項
iteration_utils
有兩個函式可以在預定義函式中搜尋重複的內容:duplicates
和 unique_everseen
。
我們將使用上面相同的列表定義 listNums
。
從 iteration_utils
中匯入 duplicates
,並使用它來返回 listNums
內所有重複的列表。
from iteration_utils import duplicates
listNums = [1, 1, 2, 3, 3, 4, 5, 5, 5, 5, 6, 8, 8]
def listDups(listNums):
return list(duplicates(listNums))
上述函式的輸出將返回一個包含 listNums
內所有重複元素的列表。
[1, 1, 3, 3, 5, 5, 5, 5, 8, 8]
雖然,這個列表還包括重複元素的迭代。這意味著它將返回重複元素的每個例項。
這就是 unique_everseen
的作用。這個函式對列表進行處理,刪除 duplicates()
返回的所有重複的例項。
from iteration_utils import duplicates
from iteration_utils import unique_everseen
listNums = [1, 1, 2, 3, 3, 4, 5, 5, 5, 5, 6, 8, 8]
def listDupsUnique(listNums):
return list(unique_everseen(duplicates(listNums)))
然後這個函式將返回以下結果。
[1, 3, 5, 8]
總而言之,在 Python 中,有兩種簡單的解決方案來查詢列表中的重複例項。第一種是使用 set()
和其他 Python 中集合的實用函式來查詢重複的內容,並將它們儲存在另一個變數中。另一種是通過 iteration_utils
模組,使用 duplicates
和 unique_everseen
,這或多或少地做了同樣的事情,產生了同樣的輸出。
Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.
LinkedIn