有沒有辦法找到一個列表是否包含重複項。例如:用Python查找重複項的方法
list1 = [1,2,3,4,5]
list2 = [1,1,2,3,4,5]
list1.*method* = False # no duplicates
list2.*method* = True # contains duplicates
有沒有辦法找到一個列表是否包含重複項。例如:用Python查找重複項的方法
list1 = [1,2,3,4,5]
list2 = [1,1,2,3,4,5]
list1.*method* = False # no duplicates
list2.*method* = True # contains duplicates
如果您將列表臨時轉換爲集合,那將消除集合中的重複項。然後可以比較列表和設置的長度。
在代碼中,它應該是這樣的:
list1 = [...]
tmpSet = set(list1)
haveDuplicates = len(list1) != len(tmpSet)
+1包括一些實際的文本來解釋你在做什麼,而不是隻是淹沒代碼。 – jdi
@jdi:我實際上試過只是簡單地放下一些代碼,但它至少在30個字符以下。 – 3Doubloons
我想讓我的+1回來! – jdi
轉換列表中的一組刪除重複。比較原始列表和集合的長度,看看是否存在重複。
>>> list1 = [1,2,3,4,5]
>>> list2 = [1,1,2,3,4,5]
>>> len(list1) == len(set(list1))
True # no duplicates
>>> len(list2) == len(set(list2))
False # duplicates
檢查原始列表的長度是否大於列表中元素的唯一「集合」的長度。如果是這樣,一定會有重複
list1 = [1,2,3,4,5]
list2 = [1,1,2,3,4,5]
if len(list1) != len(set(list1)):
#duplicates
的set()
方法只適用於哈希的對象,所以對於completness,你可以只用簡單的迭代做到這一點:
import itertools
def has_duplicates(iterable):
"""
>>> has_duplicates([1,2,3])
False
>>> has_duplicates([1, 2, 1])
True
>>> has_duplicates([[1,1], [3,2], [4,3]])
False
>>> has_duplicates([[1,1], [3,2], [4,3], [4,3]])
True
"""
return any(x == y for x, y in itertools.combinations(iterable, 2))
哎。這一個傷害了複雜性。最好爲你的不可對象編寫散列函數。 –
@JoelCornett介意爲''list'做些什麼? – lqc
'listHash = lambda x:hash(tuple(x))''。請注意,由於此散列只是一次性事物,因此您不必擔心對象會隨着您的變化而變化。 –
是這個假設列表總是排序? – tyjkenn
可能的重複:http://stackoverflow.com/questions/1920145/how-to-find-duplicate-elements-in-array-using-for-loop-in-python-like-cc – tyjkenn
@tyjkenn:檢查是否存在的重複比找到實際的重複更簡單(這是另一個問題的重點)。 – interjay