Tìm các cặp duy nhất trong danh sách python

Trả về các phần tử duy nhất được sắp xếp của một mảng. Có ba đầu ra tùy chọn ngoài các yếu tố duy nhất

  • các chỉ số của mảng đầu vào cung cấp các giá trị duy nhất

  • các chỉ số của mảng duy nhất tái cấu trúc mảng đầu vào

  • số lần mỗi giá trị duy nhất xuất hiện trong mảng đầu vào

Thông số . ar mảng_like

mảng đầu vào. Trừ khi trục được chỉ định, trục này sẽ bị làm phẳng nếu nó chưa phải là 1-D

return_index bool, tùy chọn

Nếu Đúng, cũng trả về các chỉ số của ar [dọc theo trục đã chỉ định, nếu được cung cấp hoặc trong mảng phẳng] dẫn đến mảng duy nhất

return_inverse bool, tùy chọn

Nếu Đúng, cũng trả về các chỉ số của mảng duy nhất [đối với trục đã chỉ định, nếu được cung cấp] có thể được sử dụng để tái tạo lại ar

return_counts bool, tùy chọn

Nếu Đúng, cũng trả về số lần mỗi mục duy nhất xuất hiện trong ar

trục int hoặc Không, tùy chọn

Trục để hoạt động trên. Nếu Không, ar sẽ bị san phẳng. Nếu là một số nguyên, các mảng con được lập chỉ mục bởi trục đã cho sẽ được làm phẳng và được coi là các phần tử của mảng 1-D với kích thước của trục đã cho, xem ghi chú để biết thêm chi tiết. Mảng đối tượng hoặc mảng có cấu trúc chứa đối tượng không được hỗ trợ nếu trục kwarg được sử dụng. Mặc định là Không có

Mới trong phiên bản 1. 13. 0

equal_nan bool, tùy chọn

Nếu Đúng, thu gọn nhiều giá trị NaN trong mảng trả về thành một

Mới trong phiên bản 1. 24

Trả về . duy nhất ndarray

Các giá trị duy nhất được sắp xếp

unique_indices ndarray, tùy chọn

Các chỉ số của lần xuất hiện đầu tiên của các giá trị duy nhất trong mảng ban đầu. Chỉ được cung cấp nếu return_index là True

unique_inverse ndarray, tùy chọn

Các chỉ số để xây dựng lại mảng ban đầu từ mảng duy nhất. Chỉ được cung cấp nếu return_inverse là True

unique_counts ndarray, tùy chọn

Số lần mỗi giá trị duy nhất xuất hiện trong mảng ban đầu. Chỉ được cung cấp nếu return_counts là True

Mới trong phiên bản 1. 9. 0

Xem thêm

numpy.lib.arraysetops

Mô-đun với một số chức năng khác để thực hiện các hoạt động thiết lập trên mảng

________số 8

Lặp lại các phần tử của một mảng

ghi chú

Khi một trục được chỉ định, các mảng con được lập chỉ mục bởi trục được sắp xếp. Điều này được thực hiện bằng cách biến trục đã chỉ định thành chiều đầu tiên của mảng [di chuyển trục đến chiều đầu tiên để giữ thứ tự của các trục khác] và sau đó làm phẳng các mảng con theo thứ tự C. Các mảng con được làm phẳng sau đó được xem như một kiểu có cấu trúc với mỗi phần tử được gán một nhãn, với hiệu ứng là chúng ta kết thúc bằng một mảng 1-D gồm các kiểu có cấu trúc có thể được xử lý giống như bất kỳ mảng 1-D nào khác. Kết quả là các mảng con được làm phẳng được sắp xếp theo thứ tự từ điển bắt đầu với phần tử đầu tiên

Làm cách nào để tìm số m cặp duy nhất và khác nhau từ một danh sách, cho trước một danh sách các số nguyên?

Ghi chú. Cặp có thứ tự [x,y] và [y,x] được coi là cùng một cặp

đầu vào mẫu

[2,3,7,9,0], m = 2

Đầu ra mẫu

2

Giải trình

Danh sách đã cho là [2,3,7,9,0] và sự khác biệt cần được xác định từ danh sách là 2. Các số 2 và 0 cho hiệu tuyệt đối là 2, các số 9 và 7 cũng có hiệu tuyệt đối là 2. Do đó, số lượng các cặp duy nhất có sự khác biệt tuyệt đối là 2, là 2

trường hợp góc

  • Nếu không có 2 giá trị có hiệu là m thì sao?

  • Điều gì sẽ xảy ra nếu chênh lệch tuyệt đối m được tìm thấy là một giá trị nhỏ hơn 0?

Ghi chú. Đừng quên tìm ra các trường hợp góc khuất khác [nếu có] và đưa ra giải pháp thích hợp cho những trường hợp đó, vì chúng rất quan trọng vì điều này giúp người phỏng vấn có cái nhìn sâu sắc về khả năng tư duy, khả năng logic và khả năng phân tích vấn đề của ứng viên.

Phương pháp cơ bản để giải quyết vấn đề này

Một cách tiếp cận ngây thơ là xem xét từng phần tử và xem liệu mọi phần tử khác và sự khác biệt tuyệt đối của phần tử hiện tại có phải là m hay không. Chúng ta sẽ phải sử dụng 2 vòng lặp for trong đó vòng lặp bên ngoài sẽ lấy phần tử đầu tiên và vòng lặp bên trong sẽ tìm mọi phần tử và lấy sự khác biệt của nó với giá trị được chọn của vòng lặp bên ngoài. Vì có 2 vòng lặp for liên quan nên độ phức tạp về thời gian sẽ là 0[kích thước của danh sách*kích thước của danh sách] = 0[n**2]

def findPairs[lst, n, m]: 
    count = 0
    for i in range[0, n]: 
        for j in range[i+1, n]: 
            if lst[i] - lst[j] == m or lst[j] - lst[i] == m: 
                count += 1  
    return count 
  
nums = [2,3,7,9,0]
n = len[nums]
m = 2  
findPairs[nums, n, m]

đầu ra

2

Phương pháp tối ưu hóa để giải quyết vấn đề

Phương thức

2
1 từ mô-đun bộ sưu tập theo dõi số lượng của mọi phần tử có trong danh sách

def findPairs[nums, m]:
        result = 0
        if m < 0:
            return 0
        elif m == 0:
            dic = Counter[nums]
            for i in dic.values[]:
                if i != 1:
                    result += 1
        else:
            num = set[nums]
            for i in num:
                if i+m in num:
                    result += 1
        return result

nums = [2,3,7,9,0]
m = 2  
findPairs[nums, m]

đầu ra

2

Khi tìm thấy sự khác biệt tuyệt đối lớn hơn 0, các phần tử được sắp xếp đầu tiên. Sau đó, một vòng lặp for được lặp lại trên mọi phần tử của danh sách và nó được thêm vào m [sự khác biệt tuyệt đối]. Số này được tìm kiếm trong danh sách. Nếu nó được tìm thấy, thì số lượng được tăng thêm 1. Xem xét ví dụ dưới đây

Danh sách của chúng tôi là [2, 3,7,9,0] và m là 2. Lặp lại từ phần tử đầu tiên trong danh sách, nếu tìm thấy 2+2 [4] trong danh sách, kết quả sẽ tăng dần. Nó được thực hiện cho tất cả các yếu tố. Dưới đây là một dấu vết

2+2 = 4, 4 in list? No. Result = 0
3+2 = 5, 5 in list? No. Result = 0
7+2 = 9, 9 in list? Yes. Result = 1
9+2=11, 11 in list? No. Result = 1
0+2=2, 2 in list? Yes. Result = 2

Kết quả = 2 được trả về

Phần kết luận

Trong bài đăng này, chúng tôi đã hiểu cách giải quyết số m cặp duy nhất trong một tuyên bố vấn đề về danh sách. Đừng quên đăng nhận xét của bạn về các cách tiếp cận khác nhau cho cùng một vấn đề

Chủ Đề