Hướng dẫn python check if all elements in two lists are the same - python kiểm tra xem tất cả các phần tử trong hai danh sách có giống nhau không

Xác định xem 2 danh sách có cùng yếu tố, bất kể đặt hàng?

Suy luận từ ví dụ của bạn:

x = ['a', 'b']
y = ['b', 'a']

rằng các yếu tố của danh sách sẽ không được lặp lại (chúng là duy nhất) cũng như có thể băm (chuỗi và các đối tượng python bất biến khác), câu trả lời hiệu quả trực tiếp và tính toán nhất Bộ bạn có thể đã học về ở trường).the most direct and computationally efficient answer uses Python's builtin sets, (which are semantically like mathematical sets you may have learned about in school).

set(x) == set(y) # prefer this if elements are hashable

Trong trường hợp các yếu tố có thể băm, nhưng không duy nhất,

sorted(x) == sorted(y) 
5 cũng hoạt động về mặt ngữ nghĩa như một multiset, nhưng nó chậm hơn nhiều:

from collections import Counter
Counter(x) == Counter(y)

Thích sử dụng

sorted(x) == sorted(y) 
6:

sorted(x) == sorted(y) 

Nếu các yếu tố có thể đặt hàng. Điều này sẽ giải thích cho các trường hợp không duy nhất hoặc không thể đánh bại, nhưng điều này có thể chậm hơn nhiều so với sử dụng các bộ.

Thí nghiệm thực nghiệm

Một thí nghiệm thực nghiệm kết luận rằng người ta nên thích

sorted(x) == sorted(y) 
7, sau đó
sorted(x) == sorted(y) 
6. Chỉ chọn cho
sorted(x) == sorted(y) 
9 nếu bạn cần những thứ khác như tính hoặc sử dụng thêm như một đa.

Thiết lập đầu tiên:

import timeit
import random
from collections import Counter

data = [str(random.randint(0, 100000)) for i in xrange(100)]
data2 = data[:]     # copy the list into a new one

def sets_equal(): 
    return set(data) == set(data2)

def counters_equal(): 
    return Counter(data) == Counter(data2)

def sorted_lists_equal(): 
    return sorted(data) == sorted(data2)

Và kiểm tra:

>>> min(timeit.repeat(sets_equal))
13.976069927215576
>>> min(timeit.repeat(counters_equal))
73.17287588119507
>>> min(timeit.repeat(sorted_lists_equal))
36.177085876464844

Vì vậy, chúng tôi thấy rằng so sánh các bộ là giải pháp nhanh nhất và so sánh danh sách được sắp xếp là nhanh thứ hai.

Trong bài viết này, chúng tôi sẽ thảo luận về 8 cách khác nhau để kiểm tra xem hai danh sách có bằng nhau hay không.

Giả sử chúng tôi có hai danh sách và chúng tôi muốn kiểm tra xem cả hai danh sách có bằng nhau hay không. Có thể có hai ý nghĩa của 2 bình đẳng ở đây,

  1. Cả hai danh sách phải chứa các yếu tố duy nhất giống nhau và có cùng tần số, nhưng các phần tử có thể được đặt theo bất kỳ thứ tự nào.
  2. Cả hai danh sách phải chính xác bằng nhau, tức là thứ tự của các yếu tố phải giống nhau.

Hãy để thảo luận về cả hai kịch bản một,

Kiểm tra xem hai danh sách có bằng nhau không phân biệt thứ tự của các yếu tố

Giả sử chúng tôi có hai danh sách,

first_list = [10, 10, 11, 12, 12, 13, 14, 16, 15, 16, 12]
sec_list = [16, 12, 13, 14, 15, 16, 10, 11, 12, 10, 12]

Cả hai danh sách đều chứa các yếu tố tương tự có cùng tần số, nhưng thứ tự của các phần tử khác nhau trong chúng. Có nhiều cách khác nhau để kiểm tra xem các loại danh sách này có bằng nhau hay không,

Quảng cáo

Sắp xếp và so sánh để kiểm tra xem hai danh sách có bằng không

Chúng ta có thể tạo các phiên bản được sắp xếp của cả hai danh sách. Nếu danh sách ban đầu chứa các yếu tố giống nhau nhưng theo thứ tự khác nhau, thì thứ tự của các phần tử phải tương tự theo các phiên bản được sắp xếp của danh sách. Vì vậy, bằng cách so sánh các phiên bản sắp xếp của danh sách, chúng tôi có thể tìm hiểu xem danh sách có bằng hay không. Ví dụ,

def check_if_equal(list_1, list_2):
    """ Check if both the lists are of same length and if yes then compare
    sorted versions of both the list to check if both of them are equal
    i.e. contain similar elements with same frequency. """
    if len(list_1) != len(list_2):
        return False
    return sorted(list_1) == sorted(list_2)
first_list = [10, 10, 11, 12, 12, 13, 14, 16, 15, 16, 12]
sec_list = [16, 12, 13, 14, 15, 16, 10, 11, 12, 10, 12]

if check_if_equal(first_list, sec_list):
    print('Lists are equal i.e. contain similar elements with same frequency')
else:
    print('Lists are not equal')

first_list = [10, 10, 11, 12, 12, 13, 14, 16, 15, 16, 12]
sec_list = [16, 12, 13, 14, 15, 16, 10, 11, 12, 10, 12]

if check_if_equal(first_list, sec_list):
    print('Lists are equal i.e. contain similar elements with same frequency')
else:
    print('Lists are not equal')

Đầu ra:

Lists are equal i.e. contain similar elements with same frequency

Đầu tiên, nó đã kiểm tra xem cả hai danh sách có cùng kích thước hay không. Nếu cả hai có kích thước khác nhau thì nó có nghĩa là danh sách không bằng nhau. Trong khi đó, nếu cả hai danh sách có cùng kích thước, thì sau đó đã tạo một phiên bản được sắp xếp của cả hai danh sách và so sánh chúng bằng cách sử dụng toán tử == để kiểm tra xem danh sách có bằng hay không.

Vì vậy, đây là cách chúng ta có thể so sánh hai danh sách không phân biệt thứ tự của các yếu tố trong danh sách.

Sử dụng bộ sưu tập.Count () để kiểm tra xem hai danh sách có bằng không

Mô -đun bộ sưu tập cung cấp một lớp quầy. Chúng ta có thể tạo đối tượng của nó bằng cách chuyển một danh sách cho hàm tạo của nó,

set(x) == set(y) # prefer this if elements are hashable
0

Nó trả về một đối tượng bộ đếm, là một lớp con Dict và nó chứa số lượng tần số của từng phần tử duy nhất trong danh sách. Vì vậy, để kiểm tra xem hai & nbsp; Danh sách bằng hoặc không, chúng ta có thể tạo các đối tượng bộ đếm từ cả hai danh sách và sau đó so sánh chúng để kiểm tra xem cả hai danh sách có chứa các yếu tố duy nhất tương tự có cùng tần số không.

Ví dụ,

set(x) == set(y) # prefer this if elements are hashable
1

Đầu ra:

Lists are equal i.e. contain similar elements with same frequency

Sử dụng np.array_equal () để kiểm tra xem hai danh sách có bằng không

Chúng tôi có thể tạo hai mảng numpy được sắp xếp từ danh sách của chúng tôi và sau đó chúng tôi có thể so sánh chúng bằng cách sử dụng numpy.array_equal () để kiểm tra xem cả hai có chứa cùng một phần tử không. Ví dụ,

set(x) == set(y) # prefer this if elements are hashable
3

Đầu ra:

Lists are equal i.e. contain similar elements with same frequency

Cách tiếp cận này có thể hữu ích nếu chúng ta muốn so sánh một danh sách với một mảng numpy hoặc mảng đa chiều.

Kiểm tra xem hai danh sách có chính xác không | Thứ tự các yếu tố phải giống nhau

Giả sử chúng tôi có hai danh sách,

set(x) == set(y) # prefer this if elements are hashable
5

Bây giờ chúng tôi muốn kiểm tra xem cả hai danh sách có bằng chính xác hay không, tức là nếu cả hai danh sách chứa cùng một yếu tố và quá cùng thứ tự. Vì vậy, chúng ta cần so sánh cả hai phần tử danh sách theo phần tử. Có nhiều cách khác nhau để làm điều đó và để cho chúng tôi thảo luận từng người một,

Sử dụng == toán tử để kiểm tra xem hai danh sách có bằng nhau không

Chúng ta có thể so sánh trực tiếp hai danh sách bằng cách sử dụng toán tử ==. Nếu cả hai danh sách chính xác bằng chúng, nó sẽ trả về đúng sai,

set(x) == set(y) # prefer this if elements are hashable
6

Đầu ra:

set(x) == set(y) # prefer this if elements are hashable
7

Đó là cách dễ nhất và nhanh nhất để kiểm tra xem cả hai danh sách có chính xác không. Nhưng thật tốt khi biết một số lựa chọn khác quá.

Sử dụng các hàm map () và tất cả () để kiểm tra xem hai danh sách có bằng nhau không

set(x) == set(y) # prefer this if elements are hashable
8

Đầu ra:

set(x) == set(y) # prefer this if elements are hashable
7

Nó hoạt động như thế nào?

Hàm map () áp dụng hàm Lambda đã cho cho từng phần tử của cả danh sách và lưu trữ kết quả cho một mảng mới. Trong trường hợp của chúng tôi sẽ là một mảng bool bởi vì bên trong hàm Lambda, chúng tôi đang kiểm tra xem cả hai phần tử có bằng nhau hay không.

from collections import Counter
Counter(x) == Counter(y)
0

Đầu ra:

from collections import Counter
Counter(x) == Counter(y)
1

Hàm bản đồ () trả về một mảng bool mới, trong đó mỗi mục nhập ith trong mảng bool này biểu thị nếu First_list [i] bằng với Sec_List [i] hoặc không. Nếu tất cả các yếu tố trong mảng bool này là đúng thì điều đó có nghĩa là cả hai danh sách đều bằng nhau. Chúng ta có thể làm điều này bằng cách sử dụng hàm (),

from collections import Counter
Counter(x) == Counter(y)
2

Đầu ra:

from collections import Counter
Counter(x) == Counter(y)
3

Hàm tất cả () chấp nhận một chuỗi như một đối số và trả về đúng nếu tất cả các phần tử trong chuỗi này là đúng. Vì vậy, đây là cách chúng ta có thể kiểm tra xem hai danh sách có chính xác không.

Sử dụng các hàm giảm () và map () để kiểm tra xem hai danh sách có bằng nhau không

from collections import Counter
Counter(x) == Counter(y)
4

Đầu ra:

set(x) == set(y) # prefer this if elements are hashable
7

Nó hoạt động như thế nào? Hàm bản đồ () áp dụng hàm Lambda đã cho cho từng phần tử của cả danh sách và lưu trữ kết quả cho một mảng mới. Trong trường hợp của chúng tôi sẽ là một mảng bool bởi vì bên trong hàm Lambda, chúng tôi đang kiểm tra xem cả hai phần tử có bằng nhau hay không.
The map() function applies the given lambda function to each element of both the lists and stores the result to a new array. Which in our case will be a bool array because inside the lambda function we are checking if both the elements are equal or not.

from collections import Counter
Counter(x) == Counter(y)
0

Đầu ra:

from collections import Counter
Counter(x) == Counter(y)
1

Hàm bản đồ () trả về một mảng bool mới, trong đó mỗi mục nhập ith trong mảng bool này biểu thị nếu First_list [i] bằng với Sec_List [i] hoặc không. Nếu tất cả các yếu tố trong mảng bool này là đúng thì điều đó có nghĩa là cả hai danh sách đều bằng nhau. Chúng ta có thể làm điều này bằng cách sử dụng hàm giảm (),

Hàm giảm (FUN, SEQ) chấp nhận một hàm và trình tự làm đối số. Nó trả về một giá trị duy nhất theo logic này,

  1. Đầu tiên, nó sẽ áp dụng hàm trên hai giá trị đầu tiên của chuỗi và lưu trữ kết quả là mới nhất_result.
  2. Sau đó, nó sẽ một lần nữa gọi hàm và vượt qua mới nhất_result cùng với mục tiếp theo trong chuỗi và lưu trữ kết quả là mới nhất_result.
  3. Nó sẽ lặp lại bước 2 cho đến khi tất cả các yếu tố trình tự được tiêu thụ.

Chúng ta có thể sử dụng hàm giảm () để kiểm tra xem danh sách bool có chứa tất cả các yếu tố thực hay không,

from collections import Counter
Counter(x) == Counter(y)
8

Đầu ra:

from collections import Counter
Counter(x) == Counter(y)
3

Vì vậy, đây là cách chúng ta có thể kiểm tra xem hai danh sách có chính xác không.

Lặp lại trên hai danh sách song song để kiểm tra xem hai danh sách có bằng nhau không

Chúng tôi có thể lặp lại cả hai danh sách song song bằng cách sử dụng cho vòng lặp. Cho rằng chúng tôi sẽ zip cả hai đối tượng danh sách để tạo danh sách các bộ dữ liệu. Trong đó ith tuple trong danh sách các bộ dữ liệu này chứa phần tử ith của cả hai danh sách, tức là (list_1 [i], list_2 [i]). Sau đó, chúng ta có thể lặp lại danh sách các bộ dữ liệu này để kiểm tra xem cả hai phần tử trong mỗi tuple có bằng nhau hay không. Nếu mỗi tuple chứa các phần tử bằng nhau trong danh sách các bộ dữ liệu này thì điều đó có nghĩa là cả hai danh sách đều bằng nhau.ith element of both the lists i.e. (list_1[i], list_2[i]). Then we can iterate over this list of tuples to check if both the elements in each tuple are the equal or not. If each tuple contains equal elements in this list of tuples then it means both the lists are equal.

Chúng tôi đã tạo một chức năng riêng để thực hiện logic này,

sorted(x) == sorted(y) 
0

Bây giờ, hãy để sử dụng chức năng này để kiểm tra xem cả hai danh sách có bằng hay không,

sorted(x) == sorted(y) 
1

Đầu ra:

set(x) == set(y) # prefer this if elements are hashable
7

Đây là 8 cách khác nhau để kiểm tra xem hai danh sách có bằng hoặc không ở Python hay không.

Ví dụ hoàn chỉnh như sau,

sorted(x) == sorted(y) 
3

Đầu ra:

sorted(x) == sorted(y) 
4

Đây là 8 cách khác nhau để kiểm tra xem hai danh sách có bằng hoặc không ở Python hay không.

Phương thức python sort () và == Toán tử để so sánh các danh sách chúng ta có thể câu lạc bộ phương thức python sort () với toán tử == để so sánh hai danh sách.Phương thức python sort () được sử dụng để sắp xếp các danh sách đầu vào với mục đích nếu hai danh sách đầu vào bằng nhau, thì các phần tử sẽ nằm ở cùng một vị trí chỉ mục. to compare lists We can club the Python sort() method with the == operator to compare two lists. Python sort() method is used to sort the input lists with a purpose that if the two input lists are equal, then the elements would reside at the same index positions.

Làm thế nào để bạn kiểm tra nếu hai danh sách bằng nhau?

Vì vậy, để kiểm tra xem hai danh sách có bằng nhau hay không, chúng ta có thể tạo các đối tượng bộ đếm từ cả hai danh sách và sau đó so sánh chúng để kiểm tra xem cả hai danh sách có chứa các yếu tố duy nhất tương tự có cùng tần số không.create Counter objects from both the lists and then compare them to check if both lists contain similar unique elements with the same frequency.

Làm thế nào để bạn kiểm tra xem một danh sách có giống như một danh sách khác không?

Sắp xếp () kết hợp với == Toán tử có thể đạt được nhiệm vụ này.Trước tiên chúng tôi sắp xếp danh sách, để nếu cả hai danh sách đều giống hệt nhau, thì chúng có các phần tử ở cùng một vị trí. can achieve this task. We first sort the list, so that if both the lists are identical, then they have elements at the same position.