Hướng dẫn is duplicate allowed in list python? - trùng lặp có được phép trong danh sách python không?

Hướng dẫn is duplicate allowed in list python? - trùng lặp có được phép trong danh sách python không?

Trong bài viết này, chúng tôi sẽ thảo luận về các cách khác nhau để kiểm tra xem danh sách có chứa bất kỳ yếu tố trùng lặp nào hay không.

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']

Bây giờ chúng tôi muốn kiểm tra xem danh sách này có chứa bất kỳ phần tử trùng lặp hay không. Có một số cách để làm điều này, nhưng ở đây chúng tôi sẽ thảo luận về 3 cách và cũng sẽ phân tích hiệu suất.

Kiểm tra các bản sao trong danh sách bằng cách sử dụng tập hợp và bằng cách so sánh kích thước

Để kiểm tra xem danh sách có chứa bất kỳ phần tử trùng lặp nào, hãy làm theo các bước sau không,

  1. 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.
  2. 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ì nó có nghĩa là không có bản sao trong danh sách.
    • Nếu kích thước của danh sách & bộ khác nhau thì điều đó có nghĩa là có, có những bản sao trong danh sách.

Chúng tôi đã tạo ra một hàm tuân theo Algo trên, tức là.

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.

Quảng cáo

Vì chúng tôi đang tạo một tập hợp từ danh sách, vì vậy độ phức tạp sẽ là n (log (n)). So sánh kích thước là hoạt động O (1). Vì vậy, độ phức tạp của giải pháp này là n (log (n)).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.

Quảng cáoworst 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)).

Vì chúng tôi đang tạo một tập hợp từ danh sách, vì vậy độ phức tạp sẽ là n (log (n)). So sánh kích thước là hoạt động O (1). Vì vậy, độ phức tạp của giải pháp này là 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.

Hãy cùng nhìn vào một giải pháp tốt hơn khác,

list.count(element)

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_3(listOfElems):
    ''' Check if given list contains any duplicates '''    
    for elem in listOfElems:
        if listOfElems.count(elem) > 1:
            return True
    return False

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)).

listOfElems = ['Hello', 'Ok', 'is', 'Ok', 'test', 'this', 'is', 'a', 'test']

result = checkIfDuplicates_3(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.
This is the most inefficient solution till now with complexity O(n^2)

Quảng cáo

def checkIfDuplicates_1(listOfElems):
    ''' Check if given list contains any duplicates '''
    if len(listOfElems) == len(set(listOfElems)):
        return False
    else:
        return True
1

Output:

def checkIfDuplicates_1(listOfElems):
    ''' Check if given list contains any duplicates '''
    if len(listOfElems) == len(set(listOfElems)):
        return False
    else:
        return True
2

Là bản sao được phép trong danh sách?

Giao diện danh sách cho phép lưu trữ bộ sưu tập được đặt hàng.... Sự khác biệt giữa danh sách và bộ:.

Danh sách có thể chứa các yếu tố trùng lặp?

Chúng tôi biết rằng cấu trúc dữ liệu đã đặt chỉ giữ dữ liệu duy nhất.Nhưng danh sách có thể gấp các nội dung trùng lặp.Vì vậy, nếu chúng tôi chuyển đổi danh sách thành tập hợp, kích thước của nó sẽ bị giảm nếu có bất kỳ phần tử trùng lặp nào, bằng cách khớp với độ dài, chúng tôi có thể giải quyết vấn đề này.the list can fold duplicate contents. So if we convert the list into the set, its size will be reduced if there are any duplicate elements, by matching the length, we can solve this problem.

Làm thế nào để bạn kiểm tra xem có trùng lặp trong danh sách Python không?

Đối với điều này, chúng tôi sẽ sử dụng phương thức đếm ().Phương thức đếm (), khi được gọi trong danh sách, lấy phần tử làm đối số đầu vào và trả về số lần phần tử có trong danh sách.Để kiểm tra xem danh sách có chứa các phần tử trùng lặp hay không, chúng tôi sẽ đếm tần số của từng phần tử.

Bộ dữ liệu có thể có các bản sao trong Python không?

31.2 Các loại bộ sưu tập Python cho phép các thành viên trùng lặp và được lập chỉ mục.Danh sách danh sách chứa một tập hợp các đối tượng được đặt hàng và có thể thay đổi (có thể thay đổi), chúng được lập chỉ mục và cho phép các thành viên trùng lặp.Tuples allow duplicate members and are indexed. Lists Lists hold a collection of objects that are ordered and mutable (changeable), they are indexed and allow duplicate members.