回答
如果你只是想測試一個數是否有任何元素是重複的,但你不在乎他們是哪些,你可以簡單地做:
len(list) == len(set(list))
但是,這可能是也可能不是最有效的實現。
可以使用collections.Counter
對象來獲取所有的重複元素的列表:
>>> from collections import Counter
>>>
>>> l = [1,2,2,3,4]
>>>
>>> [k for k,v in Counter(l).iteritems() if v > 1]
[2]
如果只是要檢查是否存在重複,但不關心什麼,其實就是複製,然後比較該列表的長度與該組中包含的列表中的元素的長度:
>>> len(l) != len(set(l))
True
如果有重複,該組的長度將比列表的小。如果沒有,這兩個長度將是相等的。
Counter(List1)
和set(List1)
的問題是他們不能短路。所以,如果列表1有一百萬的項目,你需要你得到你的答案之前處理整個列表
假設我們有
List1 = [1, 2, 2, 3, 4]
def has_duplicate(List1)
s = set()
for item in List1:
if item in s:
return True
s.add(item)
return False
現在的功能可以只查看3項
此之後返回如果List1
只包含可排列的項目,那很好。如果有非哈希的項目,你可以解壓縮到一個單獨的列表,只是.count()
方法@基督教的回答
如果有人確實需要快速做到這一點,同樣的邏輯可以用來做一個版本的set
構造函數並編譯成本地函數。
重要的是要注意,儘管這會造成短路,但它也是用python實現的。失敗的時間要比其他兩種方法的時間要長。根據您的使用情況,清單中有多少項目,以及您期望找到重複項目的頻率,無論哪種方式可能會更快。如果您擔心性能,測試很重要。 – OmnipotentEntity
@OmnipotentEntity,是的,當問題沒有涵蓋所有的未知數時,很難得到單一的最佳答案。還有一個複雜因素是性能會因不同的Python實現而有所不同。 –
- 1. 檢查的形式,看看是否一切都沒有改變
- 2. 查看索引是否爲負
- 3. 檢查,看看是否通過FTP
- 4. webservice如何檢查用戶是否被允許查看項目?
- 5. 是否有插件模塊查看項目階段和任務?
- 6. 搜索引擎是否會查看CSS生成的內容?
- 7. 看看是否有一個項目是真的
- 8. 檢查,看是否有場在軌
- 9. 如何檢查目錄以查看它是否有文件
- 10. Gridview和查看項目
- 11. iphone:查看索引
- 12. Laravel查詢生成器如何檢查項目是否出現兩次
- 13. 在點擊回收站查看項目之間切換片段
- 14. 在django中查看兩次發起
- 15. 列表查看項目(和子項目)
- 16. 檢查數據庫,看看是否有價值
- 17. 檢查,看看是否有輸入文件
- 18. 定期檢查,看看是否所有線程都完成
- 19. 是否有可能在codeigniter中查看foreach的索引?
- 20. 在所有選項卡下查看片段,而不是僅查看其中應該查看的片段
- 21. 如何檢查切片是否在Go中有指定的索引?
- 22. 查看操作 - 查看多個項目
- 23. RecyclerView查看項目
- 24. 查看列聯合所有列兩次
- 25. 是否有查看TFS項目活動流的工具?
- 26. 看看是否有periode
- 27. Xamarin Android搜索Recycler查看項目
- 28. Sharepoint - 字段在查看/新項目上出現兩次
- 29. 一遍又一遍檢查列表以查看索引是否存在?
- 30. 如何知道在回收站查看項目中查看是否點擊android
取決於,是保證排序的列表,如你的例子,還是不是? – OmnipotentEntity
一個特定的號碼或任何號碼?恰好兩次或最多兩次? –
不一定。 – user2925182