Có thể đặt có giá trị trùng lặp trong 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,

  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

Tìm các bản sao trong Danh sách Python và Xóa các bản sao khỏi biến danh sách Python là các tác vụ khá phổ biến. Và đó là vì Danh sách Python có xu hướng thu thập các bản sao trong đó. Kiểm tra xem có trùng lặp hay không trong một biến danh sách là một nhiệm vụ phổ biến đối với các lập trình viên Python

May mắn thay, việc kiểm tra các bản sao trong Python tương đối dễ dàng. Và một khi bạn phát hiện ra chúng, bạn có thể thực hiện một số mục hành động

  • Chỉ liệt kê các giá trị trùng lặp
  • Xóa các giá trị trùng lặp và tạo một danh sách mới mà không có bất kỳ giá trị trùng lặp nào
  • Thay đổi danh sách hiện tại bằng cách chỉ xóa các bản trùng lặp, về cơ bản là loại bỏ trùng lặp danh sách hiện có
  • Chỉ cần đánh giá danh sách trùng lặp và báo cáo nếu có trùng lặp trong danh sách này
  • Đếm các bản sao trong danh sách

Nhưng trước khi chúng ta tìm hiểu sâu hơn về từng nhiệm vụ này, tốt hơn hết là bạn nên nhanh chóng hiểu danh sách là gì và tại sao các bản sao có thể tồn tại trong danh sách Python

Tôi cũng muốn bạn biết về kiểu dữ liệu Set trong ngôn ngữ lập trình Python. Khi bạn biết điểm độc đáo và sự khác biệt của chúng, bạn sẽ đánh giá cao hơn các phương pháp được sử dụng để xác định và loại bỏ các bản sao khỏi danh sách Python

Danh sách trong Python là gì

Một danh sách trong Python giống như một mảng. Nó là một tập hợp các đối tượng, được lưu trữ trong một biến duy nhất. Một danh sách có thể thay đổi. Bạn có thể thêm hoặc xóa các phần tử khỏi danh sách Python. Một danh sách cũng có thể được sắp xếp. Nhưng theo mặc định, một danh sách không được sắp xếp

Danh sách Python cũng có thể chứa các bản sao và nó cũng có thể chứa nhiều phần tử thuộc các loại dữ liệu khác nhau. Bằng cách này, bạn có thể lưu trữ số nguyên, số dấu chấm động, số dương hoặc số âm, chuỗi và thậm chí cả giá trị boolean trong danh sách

Danh sách Python cũng có thể chứa các danh sách khác bên trong nó và có thể phát triển đến bất kỳ kích thước nào. Nhưng các danh sách được coi là chậm hơn trong việc truy cập các phần tử, so với Tuples. Vì vậy, một số phương pháp phù hợp hơn cho danh sách nhỏ và những phương pháp khác phù hợp hơn cho danh sách lớn. Nó phần lớn phụ thuộc vào kích thước danh sách

Bạn xác định một danh sách bằng cách đặt các phần tử trong dấu ngoặc vuông. Mỗi phần tử được phân tách bằng dấu phẩy trong danh sách

Tập hợp trong Python là gì?

Tập hợp là một loại dữ liệu khác có sẵn trong Python. Tại đây, bạn cũng có thể lưu trữ nhiều mục trong một Bộ. Nhưng một bộ khác với danh sách python ở chỗ một bộ không thể chứa các bản sao

Bạn có thể xác định Tập hợp bằng dấu ngoặc nhọn, so với danh sách, được xác định bằng cách sử dụng dấu ngoặc vuông

Một Set trong Python không được sắp xếp hoặc lập chỉ mục. Có thể là mỗi khi bạn truy cập vào một chỉ mục cụ thể từ một tập hợp, bạn sẽ nhận được một giá trị khác

Khi bạn đã tạo một Tập hợp trong Python, bạn có thể thêm các phần tử vào đó, nhưng bạn không thể thay đổi các phần tử hiện có

Bây giờ bạn đã hiểu cơ bản về danh sách và hiểu về Đặt kiểu dữ liệu trong Python, chúng ta sẽ khám phá việc xác định và loại bỏ các bản sao trong Danh sách Python

Nhiều cách để kiểm tra xem có tồn tại trùng lặp trong danh sách Python không

  • Độ dài của Danh sách và độ dài của Tập hợp khác nhau
  • Kiểm tra từng phần tử trong tập hợp. nếu có, dup, nếu không, thêm
  • Kiểm tra danh sách. đếm [] cho từng phần tử

Chúng tôi sẽ sử dụng Python 3 làm ngôn ngữ. Vì vậy, miễn là bạn có bất kỳ phiên bản nào của trình biên dịch Python 3, bạn có thể sử dụng được

Phương pháp 1. Sử dụng độ dài của danh sách để xác định xem nó có chứa các phần tử trùng lặp hay không

Hãy viết chương trình Python để kiểm tra điều này

# this input list contains duplicates
mylist = [5, 3, 5, 2, 1, 6, 6, 4] # 5 & 6 are duplicate numbers.

# find the length of the list
print[len[mylist]]
8

# create a set from the list
myset = set[mylist]

# find the length of the Python set variable myset
print[len[myset]]
6
# create a set from the list
myset = set[mylist]

# find the length of the Python set variable myset
print[len[myset]]
6

Như bạn có thể thấy, độ dài của biến mylist là 8 và độ dài của myset là 6

# create a set from the list
myset = set[mylist]

# find the length of the Python set variable myset
print[len[myset]]

đầu ra

6

Đây là chương trình Python cuối cùng – mã đầy đủ có thể được sao chép và dán vào chương trình Python và được sử dụng để kiểm tra xem các mục giống hệt nhau có tồn tại trong danh sách hay không

# this input list contains duplicates
mylist = [5, 3, 5, 2, 1, 6, 6, 4] # 5 & 6 are duplicate numbers.

# find the length of the list
print[len[mylist]]

# create a set from the list
myset = set[mylist]

# find the length of the Python set variable myset
print[len[myset]]

# compare the length and print if the list contains duplicates
if len[mylist] != len[myset]:
    print["duplicates found in the list"]
else:
    print["No duplicates found in the list"]

đầu ra

8
6
duplicates found in the list

Ngoài ra, chúng tôi có thể tạo một chức năng sẽ kiểm tra xem các mục trùng lặp có tồn tại hay không và sẽ trả về Đúng hoặc Sai để cảnh báo chúng tôi về các mục trùng lặp

Đây là chức năng hoàn chỉnh để kiểm tra xem có tồn tại trùng lặp trong danh sách Python không

def is_duplicate[anylist]:
    if type[anylist] != 'list':
        return["Error. Passed parameter is Not a list"]
    if len[anylist] != len[set[anylist]]:
        return True
    else:
        return False

mylist = [5, 3, 5, 2, 1, 6, 6, 4] # you can see some repeated number in the list.
if is_duplicate[mylist]:
    print["duplicates found in list"]
else:
    print["no duplicates found in list"]

Đầu ra của mã Python này là

duplicates found in list

Phương pháp 2. Liệt kê các bản sao trong một danh sách & Liệt kê các giá trị duy nhất – được sắp xếp

Trong phương pháp này, chúng tôi sẽ tạo các danh sách khác nhau để sử dụng khác nhau - một danh sách có các khóa trùng lặp hoặc giá trị lặp lại và các danh sách khác nhau cho các khóa duy nhất. Một vài dòng mã có thể làm nên điều kỳ diệu trong chương trình Python

# the given list contains duplicates
mylist = [5, 3, 5, 2, 1, 6, 6, 4] # the original list of integers with duplicates

newlist = [] # empty list to hold unique elements from the list
duplist = [] # empty list to hold the duplicate elements from the list
for i in mylist:
    if i not in newlist:
        newlist.append[i]
    else:
        duplist.append[i] # this method catches the first duplicate entries, and appends them to the list

# The next step is to print the duplicate entries, and the unique entries
print["List of duplicates", duplist]
print["Unique Item List", newlist] # prints the final list of unique items

đầu ra

List of duplicates [5, 6]
Unique Item List [5, 3, 2, 1, 6, 4]

Và nếu bạn muốn sắp xếp các mục trong danh sách sau khi loại bỏ các mục trùng lặp, bạn có thể sử dụng hàm sẵn có có tên là sắp xếp trên danh sách các số

# create a set from the list
myset = set[mylist]

# find the length of the Python set variable myset
print[len[myset]]
6
0

đầu ra

# create a set from the list
myset = set[mylist]

# find the length of the Python set variable myset
print[len[myset]]
6
1

Phương pháp 3. Chỉ liệt kê các giá trị trùng lặp với Phương thức đếm

Phương thức này lặp qua từng phần tử của toàn bộ danh sách và kiểm tra xem số lượng của từng phần tử có lớn hơn 1 không. Nếu có, mục đó được thêm vào một bộ. Nếu bạn nhớ, một bộ không thể chứa bất kỳ bản sao nào, theo thiết kế. Trong đoạn mã sau, đối với các mục tồn tại nhiều lần, chỉ những phần tử lặp lại đó mới được thêm vào tập hợp

# create a set from the list
myset = set[mylist]

# find the length of the Python set variable myset
print[len[myset]]
6
2

đầu ra

# create a set from the list
myset = set[mylist]

# find the length of the Python set variable myset
print[len[myset]]
6
3

Hãy nhớ rằng các giá trị trùng lặp được liệt kê có thể đã tồn tại một lần hoặc trước đó.

Cách nhanh nhất để loại bỏ các bản sao khỏi danh sách Python

Một trong những cách nhanh nhất để loại bỏ trùng lặp là tạo một tập hợp từ biến danh sách. Tất cả điều này có thể được thực hiện chỉ trong một câu lệnh Python. Đây là phương pháp nhanh nhất, vì vậy nó phù hợp hơn với các danh sách lớn

Đây là mã cuối cùng trong Python – có lẽ là cách tốt nhất…

# create a set from the list
myset = set[mylist]

# find the length of the Python set variable myset
print[len[myset]]
6
4

đầu ra

# create a set from the list
myset = set[mylist]

# find the length of the Python set variable myset
print[len[myset]]
6
5

Cách tránh trùng lặp trong danh sách Python

Điều đầu tiên bạn phải nghĩ đến là – Tại sao tôi lại sử dụng một danh sách trong Python?

Bởi vì nó có thể thu thập các bản sao. Nếu bạn hoàn toàn rõ ràng rằng không có bản sao nào tồn tại trong bất kỳ thứ gì bạn đang thu thập hoặc lưu trữ, thì đừng sử dụng danh sách. Thay vào đó, cách tốt hơn là sử dụng Set. Một bộ được xây dựng để từ chối trùng lặp, vì vậy đây là giải pháp tốt hơn. Bạn nên khám phá các bộ nhiều hơn một chút để hiểu rõ hơn về bộ. Nó có thể là một trình tiết kiệm thời gian thực vì đây là một cách hiệu quả hơn

Nếu bạn không quan tâm đến thứ tự thì chỉ cần sử dụng set[mylist] sẽ thực hiện công việc loại bỏ mọi trùng lặp. Đây là những gì tôi sử dụng, ngay cả trong trường hợp xấu nhất khi toàn bộ danh sách đến là một danh sách bẩn gồm nhiều phần tử trùng lặp

Ngoài ra, nếu bạn thực sự phải sử dụng danh sách vì những điều bạn có thể làm với kiểu dữ liệu danh sách, hãy thực hiện kiểm tra đơn giản trước khi thêm bất kỳ phần tử nào

Ví dụ: bạn có thể sắp xếp một danh sách, nhưng không phải là Tập hợp trong Python. Nó có thể hữu ích cho các danh sách lớn

Vì vậy, trước khi bạn thêm bất kỳ phần tử mới nào vào danh sách, chỉ cần kiểm tra nhanh sự tồn tại của giá trị. Nếu phần tử tồn tại, thì đừng lưu trữ nó. Đơn giản

Các phương pháp được thảo luận ở trên hoạt động trên bất kỳ danh sách các phần tử nào. Vì vậy, nếu bạn muốn tìm các chuỗi trùng lặp hoặc số nguyên trùng lặp hoặc số thực trùng lặp hoặc bất kỳ loại đối tượng trùng lặp nào, bạn có thể sử dụng các chương trình Python này

Hy vọng các cách khác nhau để tìm các bản sao, liệt kê chúng và cuối cùng loại bỏ hoàn toàn các phần tử trùng lặp khỏi bất kỳ danh sách Python nào bằng các chương trình và phương pháp đơn giản sẽ hữu ích cho việc xử lý và hiểu danh sách của bạn

Vinai Prakash

Vinai là Founder & Master Trainer tại Intellisoft Training. Anh ấy viết về công nghệ, nâng cấp kỹ năng và thích chia sẻ các mẹo và thủ thuật của mình để cải thiện năng suất hàng ngày và hoàn thành nhiều việc hơn. Intellisoft cung cấp chứng chỉ ICDL, đào tạo Adobe CC, Microsoft Office tại Singapore. Chúng tôi là ATO của SSG và trung tâm kiểm tra ICDL được ủy quyền

Để lại một câu trả lời

Tìm kiếm

Theo chúng tôi

Facebook-f Youtube

Bài viết gần đây

Cách tổ chức một bài thuyết trình

Đọc thêm "

Bạn có mắc phải những lỗi trình bày này không?

Đọc thêm "

Câu hỏi thường gặp về Microsoft Excel

Đọc thêm "

Sử dụng công cụ Rectangular Marquee trong Photoshop

Đọc thêm "

Chuyển đổi bất kỳ ảnh nào sang đen trắng trong Photoshop

Đọc thêm "

Infographics là gì?

Đọc thêm "

Thể loại

  • AdobePhotoshop
  • Điện toán đám mây
  • Kĩ năng giao tiếp
  • Khái niệm cơ bản về máy tính
  • Tiếp thị kỹ thuật số
  • Huấn luyện nhân viên
  • Hướng dẫn của Intellisoft – Các khóa học được tài trợ bởi WSQ
  • Microsoft Excel
  • Đào tạo Microsoft Office
  • Kỹ thuật trình bày
  • Đào tạo Python
  • Các kĩ năng mềm
  • Đào Tạo Thiết Kế Web

Hướng dẫn hàng tuần

thẻ

Adobe Photoshop Mẹo Adobe Photoshop Đào tạo Adobe Photoshop Nâng cao Excel Đào tạo lợi ích của giáo dục lợi ích của việc đào tạo nhân viên chức năng excel thông thường cơ bản về máy tính máy tính cho người mới bắt đầu công thức excel chức năng excel chức năng excel trục excel đào tạo excel khóa đào tạo excel chứng chỉ excel wsq đào tạo do chính phủ tài trợ tài trợ cho đào tạo như thế nào . quỹ đào tạo các hàm excel hữu ích vlookup trong Excel 2013 đào tạo vlookup Singapore các khóa học wda excel khóa học wda khóa học wsq khóa học wsq adobe Khóa học chứng nhận WSQ khóa học cấp chứng chỉ wsq khóa học wsq khóa học excel wsq tài trợ wsq tài trợ WSQ cho đào tạo photoshop

Chủ Đề