Danh sách các giá trị lặp lại Python

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 một danh sách có chứa bất kỳ phần tử trùng lặp nào hay không

Giả sử chúng ta có một danh sách các phần tử i. e

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 nào 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 mục trùng lặp trong danh sách bằng cách sử dụng Set & bằng cách so sánh các kích thước

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

quảng cáo

  1. Thêm nội dung của danh sách trong một tập hợp
    • Vì tập hợp chỉ chứa các phần tử duy nhất nên sẽ không có phần tử trùng lặp nào được thêm vào tập hợp
  2. So sánh kích thước của tập hợp và danh sách
    • Nếu kích thước của danh sách & tập hợp bằng nhau thì có nghĩa là không có bản sao nào trong danh sách
    • Nếu kích thước của danh sách và tập hợp khác nhau thì có nghĩa là có, có các bản sao trong danh sách

Chúng tôi đã tạo một hàm tuân theo thuật toán trên i. e

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

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

Vì chúng ta đang tạo một tập hợp từ danh sách, nên độ phức tạp sẽ là n[log[n]]. So sánh kích thước là phép toán 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ôi. e. nếu danh sách chỉ chứa phần tử trùng lặp, 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 phần tử từ danh sách vào tập hợp

Hãy xem xét một giải pháp khác tốt hơn,

Kiểm tra các bản sao trong danh sách bằng Set & tìm kiếm bản sao đầu tiên

Thay vì thêm tất cả các thành phần 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 từng phần tử vào danh sách và trong khi thêm kiểm tra xem nó có bị trùng hay không. e

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

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 thành phần của danh sách vào 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 trong 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 gặp nó trong quá trình lặp lại. Vì vậy, nó sẽ nhỏ hơn nhiều so với n[log[n]]

Hãy xem xét 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 không. đếm[]

Lớp danh sách của Python cung cấp một phương thức trả về tần suất đếm của một phần tử đã cho trong danh sách,

list.count[element]

Nó trả về số lần xuất hiện của phần tử trong danh sách

Hãy sử dụng điều này để kiểm tra các bản sao,

________số 8_______

Ở đây chúng tôi đang lặp lại tất cả các phần tử của danh sách và kiểm tra số lượng của từng phần tử trong danh sách. Nếu đếm > 1 thì có nghĩa là phần tử này có các mục trùng lặp

Trong hướng dẫn này, bạn sẽ học cách tìm và làm việc với các bản sao trong danh sách Python. Có thể làm việc hiệu quả với các danh sách Python là một kỹ năng quan trọng, do danh sách được sử dụng rộng rãi như thế nào. Bởi vì danh sách Python cho phép chúng tôi lưu trữ các giá trị trùng lặp, có thể xác định, loại bỏ và hiểu các giá trị trùng lặp là một kỹ năng hữu ích để thành thạo

Đến cuối hướng dẫn này, bạn sẽ học được cách

  • Tìm các bản sao trong danh sách, cũng như cách đếm chúng
  • Xóa các bản sao trong danh sách Python
  • Tìm trùng lặp trong danh sách từ điển và danh sách

Bắt đầu nào

Mục lục

Cách tìm các bản sao trong danh sách bằng Python

Hãy bắt đầu hướng dẫn này bằng cách trình bày cách tìm các bản sao trong danh sách bằng Python. Chúng ta có thể làm điều này bằng cách sử dụng cả hàm set[] và phương thức list.count[]

Phương thức .count[] nhận một đối số duy nhất, mục bạn muốn đếm và trả về số lần mục đó xuất hiện trong danh sách. Vì điều này, chúng tôi có thể tạo cách hiểu danh sách chỉ trả về các mục tồn tại nhiều lần. Hãy xem cách nó hoạt động và sau đó chia nhỏ nó ra một chút

# Finding Duplicate Items in a Python List
numbers = [1, 2, 3, 2, 5, 3, 3, 5, 6, 3, 4, 5, 7]

duplicates = [number for number in numbers if numbers.count[number] > 1]
unique_duplicates = list[set[duplicates]]

print[unique_duplicates]

# Returns: [2, 3, 5]

Hãy phá vỡ những gì chúng tôi đã làm ở đây

  1. Chúng tôi đã sử dụng cách hiểu danh sách để bao gồm bất kỳ mục nào tồn tại nhiều lần trong danh sách
  2. Sau đó, chúng tôi đã chuyển đổi tập hợp này thành tập hợp để loại bỏ bất kỳ mục trùng lặp nào khỏi danh sách đã lọc
  3. Cuối cùng, chúng tôi đã chuyển tập hợp trở lại danh sách

Trong phần tiếp theo, bạn sẽ tìm hiểu cách tìm các mục trùng lặp trong danh sách Python và đếm tần suất xuất hiện của chúng

Cách tìm các bản sao trong danh sách và đếm chúng trong Python

Trong phần này, bạn sẽ học cách đếm các mục trùng lặp trong danh sách Python. Điều này cho phép bạn biến một danh sách các mục thành một từ điển trong đó khóa là mục danh sách và giá trị tương ứng là số lần mục đó được sao chép

Để thực hiện điều này, chúng tôi sẽ sử dụng lớp Counter từ mô-đun bộ sưu tập. Sau đó, chúng tôi sẽ lọc từ điển kết quả của mình bằng cách hiểu từ điển. Hãy xem mã và sau đó chúng tôi sẽ chia nhỏ các bước theo từng dòng

# Finding Duplicate Items in a Python List and Count Them
from collections import Counter
numbers = [1, 2, 3, 2, 5, 3, 3, 5, 6, 3, 4, 5, 7]

counts = dict[Counter[numbers]]
duplicates = {key:value for key, value in counts.items[] if value > 1}
print[duplicates]

# Returns: {2: 2, 3: 4, 5: 3}

Hãy chia nhỏ mã này, vì nó phức tạp hơn một chút

  1. Chúng tôi nhập lớp Counter từ thư viện bộ sưu tập
  2. Chúng tôi tải danh sách của chúng tôi về
    # Finding Duplicate Items in a Python List and Count Them
    from collections import Counter
    numbers = [1, 2, 3, 2, 5, 3, 3, 5, 6, 3, 4, 5, 7]
    
    counts = dict[Counter[numbers]]
    duplicates = {key:value for key, value in counts.items[] if value > 1}
    print[duplicates]
    
    # Returns: {2: 2, 3: 4, 5: 3}
    0
  3. Sau đó, chúng tôi tạo một đối tượng Bộ đếm trong danh sách của mình và chuyển đổi nó thành từ điển
  4. Sau đó, chúng tôi lọc từ điển của mình để xóa bất kỳ khóa nào. cặp giá trị trong đó khóa chỉ tồn tại một lần

Trong phần tiếp theo, bạn sẽ tìm hiểu cách xóa các mục trùng lặp khỏi danh sách Python

Cách xóa các bản sao khỏi danh sách trong Python

Loại bỏ các bản sao trong danh sách Python được thực hiện dễ dàng bằng cách sử dụng hàm set[]. Vì các bộ trong Python không thể có các mục trùng lặp, nên khi chúng tôi chuyển đổi một danh sách thành một bộ, nó sẽ loại bỏ mọi mục trùng lặp trong danh sách đó. Sau đó, chúng ta có thể biến tập hợp trở lại thành một danh sách, sử dụng hàm

# Finding Duplicate Items in a Python List and Count Them
from collections import Counter
numbers = [1, 2, 3, 2, 5, 3, 3, 5, 6, 3, 4, 5, 7]

counts = dict[Counter[numbers]]
duplicates = {key:value for key, value in counts.items[] if value > 1}
print[duplicates]

# Returns: {2: 2, 3: 4, 5: 3}
2

Hãy xem cách chúng ta có thể làm điều này trong Python

# Remove Duplicates from a List in Python
from collections import Counter
numbers = [1, 2, 3, 2, 5, 3, 3, 5, 6, 3, 4, 5, 7]
unique = list[set[numbers]]
print[unique]

# Returns: [1, 2, 3, 4, 5, 6, 7]

Để tìm hiểu về các cách khác mà bạn có thể xóa các bản sao khỏi danh sách trong Python, hãy xem hướng dẫn này bao gồm nhiều cách khác nhau để thực hiện việc này. Trong phần tiếp theo, bạn sẽ học cách tìm các từ trùng lặp trong danh sách từ điển

Cách xóa các bản sao trong danh sách từ điển bằng Python

Hãy xem cách chúng ta có thể loại bỏ các từ trùng lặp khỏi danh sách từ điển trong Python. Bạn sẽ thường gặp dữ liệu từ web ở định dạng giống như danh sách từ điển. Có thể loại bỏ các bản sao khỏi các danh sách này là một kỹ năng quan trọng để đơn giản hóa dữ liệu của bạn

Hãy xem cách chúng ta có thể làm điều này trong Python bằng cách sử dụng vòng lặp for

# Remove Duplicates from a List of Dictionaries
items = [{'name':'Nik'}, {'name': 'Kate'}, {'name':'James'}, {'name':'Nik'}, {'name': 'Kate'}]
unique_items = []

for item in items:
    if item not in unique_items:
        unique_items.append[item]
print[unique_items]

# Returns: [{'name': 'Nik'}, {'name': 'Kate'}, {'name': 'James'}]

Phương pháp này sẽ chỉ bao gồm các bản sao hoàn chỉnh. Điều này có nghĩa là nếu một từ điển có thêm một cặp khóa-giá trị thì nó sẽ được đưa vào

Cách xóa các bản sao trong danh sách danh sách bằng Python

Chúng ta có thể sử dụng phương pháp tương tự để xóa các bản sao khỏi danh sách các danh sách trong Python. Một lần nữa, cách tiếp cận này sẽ yêu cầu danh sách phải hoàn thành giống nhau để nó được coi là trùng lặp. Trong trường hợp này, thậm chí các đơn đặt hàng khác nhau sẽ được coi là duy nhất

Hãy xem cái này trông như thế nào

# Remove Duplicates from a List of Lists in Python
list_of_lists = [[1,2,3], [1,2], [2,3], [1,2,3], [2,3], [1,2,3,4]]
unique = []

for sublist in list_of_lists:
    if sublist not in unique:
        unique.append[sublist]

print[unique]

# Returns: [[1, 2, 3], [1, 2], [2, 3], [1, 2, 3, 4]]

Những gì chúng tôi làm ở đây là lặp lại từng danh sách con trong danh sách danh sách của chúng tôi và đánh giá xem mục đó có tồn tại trong danh sách duy nhất của chúng tôi không. Nếu nó chưa tồn tại [tôi. e. , nó là duy nhất cho đến nay], sau đó nó được thêm vào danh sách của chúng tôi. Điều này đảm bảo rằng một mặt hàng chỉ được thêm vào danh sách của chúng tôi một lần duy nhất

Phần kết luận

Trong hướng dẫn này, bạn đã học cách làm việc với các mục trùng lặp trong danh sách Python. Đầu tiên, bạn đã học cách xác định các yếu tố trùng lặp và cách đếm tần suất chúng xảy ra. Sau đó, bạn đã học cách xóa các phần tử trùng lặp khỏi danh sách bằng cách sử dụng hàm set[]. Từ đó, bạn đã biết cách loại bỏ các mục trùng lặp khỏi danh sách từ điển cũng như danh sách danh sách trong Python

Khả năng làm việc với danh sách giúp cải thiện đáng kể kỹ năng lập trình Python của bạn. Bởi vì những cấu trúc dữ liệu này cực kỳ phổ biến, nên việc có thể làm việc với chúng giúp bạn trở thành nhà phát triển tự tin và có năng lực hơn nhiều

Chủ Đề