Đối với nhiều lần xuất hiện, điều này cung cấp cho bạn chỉ số của mỗi lần xảy ra:
>>> lst=[1,2,3,4,5,1]
>>> tgt=1
>>> found=[]
>>> for index, suspect in enumerate[lst]:
... if[tgt==suspect]:
... found.append[index]
...
>>> print len[found], "found at index:",", ".join[map[str,found]]
2 found at index: 0, 5
Nếu bạn muốn số lượng của từng mục trong danh sách:
>>> lst=[1,2,3,4,5,2,2,1,5,5,5,5,6]
>>> count={}
>>> for item in lst:
... count[item]=lst.count[item]
...
>>> count
{1: 2, 2: 3, 3: 1, 4: 1, 5: 5, 6: 1}
Kiểm tra các bản sao trong một danh sách bằng cách sử dụng Set & bằng cách so sánh kích thước. Thêm nội dung của danh sách trong một bộ. Vì tập hợp chỉ chứa các yếu tố duy nhất, do đó sẽ không có bản sao nào được thêm vào tập hợp .. So sánh kích thước của bộ và danh sách. Nếu kích thước của danh sách & bộ bằng nhau thì điều đó có nghĩa là không có bản sao trong danh sách .. Hàm chung trong danh sách là Danh sách.Count [x] và sẽ trả về số lần x xảy ra trong danh sách. Giả sử chúng ta có một danh sách các yếu tố, tức là.listOfElems = ['Hello', 'Ok', 'is', 'Ok', 'test', 'this', 'is', 'a', 'test']
Làm thế nào để bạn kiểm tra xem một số xuất hiện nhiều hơn một lần trong danh sách Python?
def checkIfDuplicates_1[listOfElems]: ''' Check if given list contains any duplicates ''' if len[listOfElems] == len[set[listOfElems]]: return False else: return True
Bây giờ, hãy để sử dụng chức năng này để kiểm tra xem danh sách của chúng tôi có chứa bất kỳ bản sao nào hay không.
listOfElems = ['Hello', 'Ok', 'is', 'Ok', 'test', 'this', 'is', 'a', 'test'] result = checkIfDuplicates_1[listOfElems] if result: print['Yes, list contains duplicates'] else: print['No duplicates found in list']
Đầu ra
Yes, list contains duplicates
Phân tích độ phức tạp của giải pháp này
Trong trường hợp xấu nhất, chúng tôi sẽ thêm tất cả các yếu tố của danh sách trong một tập hợp để thấy rằng danh sách của chúng tôi không chứa bất kỳ bản sao nào. Vì vậy, độ phức tạp trường hợp xấu nhất sẽ là n [log [n]]. Trong trường hợp tốt nhất, chúng ta sẽ biết về trùng lặp ngay khi chúng ta gặp nó trong quá trình lặp lại. Vì vậy, nó sẽ ít hơn nhiều so với n [log [n]].
Hãy cùng nhìn vào một giải pháp khác.n[log[n]]. Comparing size is a O[1] operation. So, complexity of this solution is n[log[n]].
Ngay cả trong kịch bản tốt nhất, tức là nếu danh sách chỉ chứa phần tử được nhân đôi, thì độ phức tạp của giải pháp này sẽ là n [log [n]] vì chúng tôi chỉ thêm tất cả các yếu tố từ danh sách này sang danh sách khác.n[log[n]] because we are just adding all the elements from list to set.
Hãy cùng nhìn vào một giải pháp tốt hơn khác,
Kiểm tra các bản sao trong danh sách bằng cách sử dụng Set và tìm kiếm bản sao đầu tiên
Thay vì thêm tất cả các yếu tố danh sách vào tập hợp và sau đó tìm kiếm các bản sao. Chúng ta có thể thêm các phần tử từng một vào danh sách và trong khi thêm kiểm tra xem nó có được nhân đôi hay không, tức là.
def checkIfDuplicates_2[listOfElems]: ''' Check if given list contains any duplicates ''' setOfElems = set[] for elem in listOfElems: if elem in setOfElems: return True else: setOfElems.add[elem] return False
Bây giờ, hãy để sử dụng chức năng này để kiểm tra xem danh sách của chúng tôi có chứa bất kỳ bản sao nào hay không.
listOfElems = ['Hello', 'Ok', 'is', 'Ok', 'test', 'this', 'is', 'a', 'test'] result = checkIfDuplicates_2[listOfElems] if result: print['Yes, list contains duplicates'] else: print['No duplicates found in list']
Đầu ra
Yes, list contains duplicates
Phân tích độ phức tạp của giải pháp này
Trong trường hợp xấu nhất, chúng tôi sẽ thêm tất cả các yếu tố của danh sách trong một tập hợp để thấy rằng danh sách của chúng tôi không chứa bất kỳ bản sao nào. Vì vậy, độ phức tạp trường hợp xấu nhất sẽ là n [log [n]]. Trong trường hợp tốt nhất, chúng ta sẽ biết về trùng lặp ngay khi chúng ta gặp nó trong quá trình lặp lại. Vì vậy, nó sẽ ít hơn nhiều so với n [log [n]].worst case complexity will be n[log[n]].
In best case, we will get to know about duplicate as soon as we
encounter it during iteration. So, it will be much lesser than n[log[n]].
Hãy cùng nhìn vào một giải pháp khác.
Kiểm tra xem danh sách có chứa các bản sao bằng danh sách.count []
Lớp danh sách Python cung cấp một phương thức trả về số lượng tần số của một phần tử nhất định trong danh sách,
list.count[element]
Nó trả về số lượng phần tử xuất hiện trong danh sách.
Hãy để sử dụng điều này để kiểm tra các bản sao,
>>> lst=[1,2,3,4,5,2,2,1,5,5,5,5,6]
>>> count={}
>>> for item in lst:
... count[item]=lst.count[item]
...
>>> count
{1: 2, 2: 3, 3: 1, 4: 1, 5: 5, 6: 1}
0Ở đây chúng tôi đang lặp lại tất cả các yếu tố của danh sách và kiểm tra số lượng của từng yếu tố trong danh sách. Nếu đếm> 1 thì điều đó có nghĩa là phần tử này có các mục trùng lặp.
Bây giờ, hãy để sử dụng chức năng này để kiểm tra xem danh sách của chúng tôi có chứa bất kỳ bản sao nào hay không.
>>> lst=[1,2,3,4,5,2,2,1,5,5,5,5,6]
>>> count={}
>>> for item in lst:
... count[item]=lst.count[item]
...
>>> count
{1: 2, 2: 3, 3: 1, 4: 1, 5: 5, 6: 1}
1Đầu ra
Yes, list contains duplicates
Phân tích độ phức tạp của giải pháp này Đây là giải pháp không hiệu quả nhất cho đến nay với độ phức tạp O [n^2]
This is the most inefficient solution till now with complexity O[n^2]
Ví dụ hoàn chỉnh như sau,
>>> lst=[1,2,3,4,5,2,2,1,5,5,5,5,6]
>>> count={}
>>> for item in lst:
... count[item]=lst.count[item]
...
>>> count
{1: 2, 2: 3, 3: 1, 4: 1, 5: 5, 6: 1}
3Output:
>>> lst=[1,2,3,4,5,2,2,1,5,5,5,5,6]
>>> count={}
>>> for item in lst:
... count[item]=lst.count[item]
...
>>> count
{1: 2, 2: 3, 3: 1, 4: 1, 5: 5, 6: 1}
4