Làm cách nào để đếm các giá trị duy nhất trong danh sách Python?
Cách đơn giản nhất để đếm các giá trị duy nhất trong danh sách Python là chuyển đổi danh sách thành tập hợp xem xét rằng tất cả các phần tử của tập hợp là duy nhất. Bạn cũng có thể đếm các giá trị duy nhất trong danh sách bằng từ điển, các bộ sưu tập. Lớp truy cập, Numpy. độc đáo[] hoặc Pandas. độc nhất[]
Hầu hết các ví dụ của chúng tôi sẽ hoạt động trên cùng một danh sách các số
numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
Chúng tôi sẽ triển khai mọi cách tiếp cận theo chức năng riêng của nó để dễ dàng gọi chúng từ “phần chính” của mã của chúng tôi. Mọi chức năng lấy danh sách số làm đầu vào và trả về danh sách với các giá trị duy nhất
Sau đó, phần chính của chương trình sẽ đếm số lượng giá trị duy nhất bằng cách sử dụng phương thức list len[]
Bắt đầu nào
Mục lục
1. Sử dụng vòng lặp For để đếm các giá trị duy nhất trong danh sách Python
Cách tiếp cận đầu tiên sử dụng vòng lặp Python for để duyệt qua tất cả các phần tử
def get_unique_values_with_for_loop[values]:
unique_values = []
for value in values:
if value not in unique_values:
unique_values.append[value]
return unique_values
Vòng lặp for đi qua mọi phần tử của danh sách và thêm phần tử đó vào danh sách mới nếu nó chưa có trong danh sách mới
Hãy viết một đoạn mã chung để in kết quả do hàm này trả về để chúng ta có thể sử dụng khá nhiều đoạn mã tương tự để in kết quả do các hàm khác trả về mà chúng ta sẽ tạo trong các phần tiếp theo
numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop[numbers]
number_of_unique_values = len[unique_values]
print["The list of unique values is: {}".format[unique_values]]
print["The number of unique values is: {}".format[number_of_unique_values]]
đầu ra là
The list of unique values is: [2, 3, 6, 8, 23, 24, 30, 45, 50, 51]
The number of unique values is: 10
Dòng duy nhất chúng ta sẽ phải cập nhật khi gọi một chức năng khác là như sau
unique_values = get_unique_list_with_for_loop[numbers]
Mọi thứ khác trong chương trình chính của chúng tôi sẽ giữ nguyên vì nó phụ thuộc vào biến unique_values
2. Đếm các giá trị duy nhất trong danh sách Python bằng một tập hợp
Tập hợp là một cấu trúc dữ liệu chỉ chứa các phần tử duy nhất. Chúng ta có thể sử dụng thuộc tính này của tập hợp để chỉ lấy lại các giá trị duy nhất
def get_unique_values_with_set[values]:
return set[values]
...
unique_values = get_unique_values_with_set[numbers]
...
Lưu ý dấu ngoặc nhọn trong đầu ra do hàm trả về một tập hợp
The list of unique values is: {2, 3, 6, 8, 45, 50, 51, 23, 24, 30}
The number of unique values is: 10
Bạn có thấy thứ tự của các phần tử đã thay đổi so với danh sách ban đầu không?
Đó là bởi vì…
Kiểu dữ liệu đã đặt không có thứ tự
Điểm hay của cách tiếp cận này là mã ngắn gọn hơn rất nhiều [chỉ là một hàm dòng đơn]
3. Sử dụng từ điển để lấy số lượng giá trị duy nhất trong danh sách
Chúng ta có thể sử dụng thực tế là các khóa từ điển là duy nhất để lấy các phần tử duy nhất từ danh sách ban đầu không?
Chúng ta có thể tạo một từ điển trong đó các phần tử duy nhất trong danh sách là các khóa của từ điển. Các giá trị của từ điển là các bộ đếm cho chúng ta biết mỗi phần tử xuất hiện bao nhiêu lần trong danh sách
def get_unique_values_with_dictionary[values]:
new_values = {}
for value in values:
if value in new_values.keys[]:
new_values[value] += 1
else:
new_values[value] = 1
print[new_values]
return new_values.keys[]
...
unique_values = get_unique_values_with_dictionary[numbers]
...
Tại mỗi lần lặp của vòng lặp for, chúng tôi xác minh xem một giá trị cụ thể đã tồn tại dưới dạng khóa từ điển chưa. Nếu không, chúng tôi thêm khóa đó vào từ điển và chúng tôi đặt giá trị thành 1
Nếu không, chúng tôi tăng giá trị được liên kết với khóa hiện có trong từ điển
Tôi đã thêm một câu lệnh print[] trong hàm để hiển thị cho bạn từ điển đã tạo
________số 84. bộ sưu tập. Bộ đếm để đếm các giá trị duy nhất trong danh sách
Cách tiếp cận tương tự được giải thích trong phần trước [sử dụng từ điển chuẩn] cũng có thể được triển khai bằng cách sử dụng lớp Counter của mô-đun Bộ sưu tập
Hãy tìm hiểu chính xác những gì Counter làm
>>> from collections import Counter
>>> Counter[[1,2,3,3]]
Counter[{3: 2, 1: 1, 2: 1}]
Thú vị…
Nó tạo ra một cấu trúc dữ liệu giống như từ điển trong đó các khóa là các phần tử của danh sách và các giá trị cho biết số lượng của từng phần tử trong danh sách gốc
Về cơ bản giống như những gì chúng ta đã tạo trong phần trước bằng cách sử dụng từ điển Python tiêu chuẩn
Hãy áp dụng nó vào danh sách các số của chúng ta
def get_unique_values_with_for_loop[values]:
unique_values = []
for value in values:
if value not in unique_values:
unique_values.append[value]
return unique_values
0Đây là những phương thức có sẵn cho đối tượng Counter
def get_unique_values_with_for_loop[values]:
unique_values = []
for value in values:
if value not in unique_values:
unique_values.append[value]
return unique_values
1Các. keys[] là phương thức chúng ta cần để lấy các phần tử duy nhất trong danh sách ban đầu
def get_unique_values_with_for_loop[values]:
unique_values = []
for value in values:
if value not in unique_values:
unique_values.append[value]
return unique_values
2Vì vậy, chúng ta có thể thêm chức năng sau vào mã của mình
def get_unique_values_with_for_loop[values]:
unique_values = []
for value in values:
if value not in unique_values:
unique_values.append[value]
return unique_values
3đầu ra là
def get_unique_values_with_for_loop[values]:
unique_values = []
for value in values:
if value not in unique_values:
unique_values.append[value]
return unique_values
4Cũng giống như cách chúng ta đã thấy khi sử dụng tập hợp, với cách tiếp cận này, chúng ta có thể viết hàm một dòng
5. Đếm các giá trị duy nhất trong danh sách bằng NumPy
Thư viện NumPy cũng cung cấp cách đếm các giá trị duy nhất trong danh sách [hoặc mảng]
NumPy. duy nhất không chỉ cho phép tìm các phần tử duy nhất của một mảng mà còn cung cấp số lần mỗi phần tử có mặt bằng cách sử dụng tham số return_counts
def get_unique_values_with_for_loop[values]:
unique_values = []
for value in values:
if value not in unique_values:
unique_values.append[value]
return unique_values
5Vì vậy, hãy tạo một chức năng mới sử dụng np. độc nhất[]
def get_unique_values_with_for_loop[values]:
unique_values = []
for value in values:
if value not in unique_values:
unique_values.append[value]
return unique_values
6Và đây là những yếu tố độc đáo chúng tôi lấy lại
def get_unique_values_with_for_loop[values]:
unique_values = []
for value in values:
if value not in unique_values:
unique_values.append[value]
return unique_values
76. Sử dụng Pandas để nhận các giá trị duy nhất trong danh sách
Chúng tôi cũng có thể nhận các giá trị duy nhất trong danh sách bằng Pandas. Để làm điều đó, chúng tôi sẽ sử dụng gấu trúc. độc nhất
Nó lấy đầu vào là một mảng một chiều, vì vậy hãy viết hàm của chúng ta
def get_unique_values_with_for_loop[values]:
unique_values = []
for value in values:
if value not in unique_values:
unique_values.append[value]
return unique_values
8Đầu ra được trả về bởi chương trình của chúng tôi là
def get_unique_values_with_for_loop[values]:
unique_values = []
for value in values:
if value not in unique_values:
unique_values.append[value]
return unique_values
77. Đếm các giá trị duy nhất trong danh sách từ điển
Hãy viết mã để làm điều gì đó phức tạp hơn một chút
Tôi có một danh sách các từ điển chứa cùng một khóa và tôi muốn lấy số lượng các giá trị duy nhất trên tất cả các từ điển trong danh sách
numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop[numbers]
number_of_unique_values = len[unique_values]
print["The list of unique values is: {}".format[unique_values]]
print["The number of unique values is: {}".format[number_of_unique_values]]
0Bước đầu tiên là lấy một danh sách chứa tất cả các giá trị trong mỗi từ điển. Để làm điều đó, chúng ta có thể sử dụng cách hiểu danh sách
numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop[numbers]
number_of_unique_values = len[unique_values]
print["The list of unique values is: {}".format[unique_values]]
print["The number of unique values is: {}".format[number_of_unique_values]]
1Bây giờ chúng ta có thể sử dụng một trong những phương pháp đã được sử dụng trước đây. Ví dụ: chúng ta có thể chuyển danh sách vào bộ sưu tập. Phản đối
numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop[numbers]
number_of_unique_values = len[unique_values]
print["The list of unique values is: {}".format[unique_values]]
print["The number of unique values is: {}".format[number_of_unique_values]]
2Có ý nghĩa?
8. Cái nào là cách tiếp cận nhanh hơn để đếm các giá trị danh sách duy nhất?
Chúng tôi sẽ hoàn thành hướng dẫn này bằng cách so sánh hiệu suất của tất cả các phương pháp chúng tôi đã triển khai để giải quyết vấn đề của mình
Để làm điều đó, chúng tôi sẽ tạo một danh sách với các phần tử ngẫu nhiên và sau đó sử dụng mô-đun timeit để đo thời gian thực hiện cho mỗi lần thực hiện
Chúng tôi sẽ tạo danh sách các số ngẫu nhiên bằng mô-đun ngẫu nhiên Python
numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop[numbers]
number_of_unique_values = len[unique_values]
print["The list of unique values is: {}".format[unique_values]]
print["The number of unique values is: {}".format[number_of_unique_values]]
3Đây chỉ là một ví dụ về danh sách chứa 10 số ngẫu nhiên từ 0 đến 9. Để đo lường hiệu suất của chức năng của chúng tôi, chúng tôi sẽ sử dụng một danh sách lớn hơn với các số ngẫu nhiên trong phạm vi rộng hơn
numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop[numbers]
number_of_unique_values = len[unique_values]
print["The list of unique values is: {}".format[unique_values]]
print["The number of unique values is: {}".format[number_of_unique_values]]
4Hãy lấy hàm đầu tiên mà chúng ta đã tạo, hàm sử dụng vòng lặp for. Đây là cách chúng ta có thể truyền nó vào hàm
numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop[numbers]
number_of_unique_values = len[unique_values]
print["The list of unique values is: {}".format[unique_values]]
print["The number of unique values is: {}".format[number_of_unique_values]]
5Tham số số đại diện cho số lần thực hiện
đầu ra là
numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop[numbers]
number_of_unique_values = len[unique_values]
print["The list of unique values is: {}".format[unique_values]]
print["The number of unique values is: {}".format[number_of_unique_values]]
6Để đo thời gian thực hiện cho mọi chức năng với time, chỉ cần bao quanh một chức năng đã cho với hai dòng sau giống như cách chúng ta đã thực hiện ở trên
numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop[numbers]
number_of_unique_values = len[unique_values]
print["The list of unique values is: {}".format[unique_values]]
print["The number of unique values is: {}".format[number_of_unique_values]]
7Hãy so sánh thời gian thực hiện giữa sáu cách tiếp cận được triển khai trong hướng dẫn này
numbers = [2, 3, 3, 6, 8, 8, 23, 24, 24, 30, 45, 50, 51, 51]
unique_values = get_unique_values_with_for_loop[numbers]
number_of_unique_values = len[unique_values]
print["The list of unique values is: {}".format[unique_values]]
print["The number of unique values is: {}".format[number_of_unique_values]]
8Cách triển khai nhanh nhất là cách triển khai đầu tiên sử dụng vòng lặp Python for và hầu hết chúng đều có hiệu suất tương đương
Sự kết luận
Sau khi đọc bài viết này, bạn có rất nhiều cách khác nhau để đếm các giá trị duy nhất trong danh sách Python
Tôi hy vọng bạn thấy hướng dẫn này hữu ích để xem cách bạn có thể giải quyết cùng một vấn đề theo nhiều cách khác nhau bằng Python
Bạn thích giải pháp nào chúng tôi đã thực hiện hơn?
Bài viết liên quan
Phương thức sơ thẩm trong Python là gì?
Cách viết bài kiểm tra đơn vị bằng Python. Hướng dẫn đơn giản
Python với câu lệnh mở. Hướng dẫn đơn giản
Claudio Sabato
Tôi là Trưởng nhóm công nghệ, Kỹ sư phần mềm và Huấn luyện viên lập trình. Tôi muốn giúp bạn trong hành trình trở thành Nhà phát triển siêu hạng