Hướng dẫn how do i check if two nested lists are equal in python? - làm cách nào để kiểm tra xem hai danh sách lồng nhau có bằng nhau trong python không?

Giả sử tôi có hai danh sách danh sách trong Python,

l1 = [['a',1], ['b',2], ['c',3]] l2 = [['b',2], ['c',3], ['a',1]]

Cách thanh lịch nhất để kiểm tra chúng bằng nhau theo nghĩa là các yếu tố của >>> l1 = [['a',1], ['b',2], ['c',3]] >>> l2 = [['b',2], ['c',3], ['a',1]] >>> print set(map(tuple,l1)) == set(map(tuple,l2)) True 5 chỉ đơn giản là một số hoán vị của các yếu tố trong >>> l1 = [['a',1], ['b',2], ['c',3]] >>> l2 = [['b',2], ['c',3], ['a',1]] >>> print set(map(tuple,l1)) == set(map(tuple,l2)) True 6?

Lưu ý để thực hiện điều này cho các danh sách thông thường xem tại đây, tuy nhiên điều này sử dụng >>> l1 = [['a',1], ['b',2], ['c',3]] >>> l2 = [['b',2], ['c',3], ['a',1]] >>> print set(map(tuple,l1)) == set(map(tuple,l2)) True 7 không hoạt động cho danh sách danh sách.

Hỏi ngày 22 tháng 12 năm 2014 lúc 15:42Dec 22, 2014 at 15:42

1

l1 = [['a',1], ['b',2], ['c',3]] l2 = [['b',2], ['c',3], ['a',1]] print sorted(l1) == sorted(l2)

Result:

True

Đã trả lời ngày 22 tháng 12 năm 2014 lúc 15:43Dec 22, 2014 at 15:43

KevinkevinKevin

73.5K12 Huy hiệu vàng126 Huy hiệu bạc163 Huy hiệu Đồng12 gold badges126 silver badges163 bronze badges

>>> l1 = [['a',1], ['b',2], ['c',3]] >>> l2 = [['b',2], ['c',3], ['a',1]] >>> print set(map(tuple,l1)) == set(map(tuple,l2)) True 8 không hoạt động cho danh sách danh sách nhưng nó hoạt động cho danh sách các bộ dữ liệu. Sou bạn có thể >>> l1 = [['a',1], ['b',2], ['c',3]] >>> l2 = [['b',2], ['c',3], ['a',1]] >>> print set(map(tuple,l1)) == set(map(tuple,l2)) True 9 mỗi người phụ trợ để tìm kiếm và sử dụng >>> l1 = [['a',1], ['b',2], ['c',3]] >>> l2 = [['b',2], ['c',3], ['a',1]] >>> print set(map(tuple,l1)) == set(map(tuple,l2)) True 7 như:

>>> l1 = [['a',1], ['b',2], ['c',3]] >>> l2 = [['b',2], ['c',3], ['a',1]] >>> print set(map(tuple,l1)) == set(map(tuple,l2)) True

Đã trả lời ngày 22 tháng 12 năm 2014 lúc 15:48Dec 22, 2014 at 15:48

Irshad Bhatirshad BhatIrshad Bhat

8.1611 Huy hiệu vàng22 Huy hiệu bạc33 Huy hiệu đồng1 gold badge22 silver badges33 bronze badges

1

Đối với một giải pháp lót cho câu hỏi trên, hãy tham khảo câu trả lời của tôi trong câu hỏi này

Tôi đang trích dẫn cùng một câu trả lời ở đây. Điều này sẽ hoạt động bất kể đầu vào của bạn là một danh sách đơn giản hay một danh sách lồng nhau.

Hãy để hai danh sách là List1 và List2, và yêu cầu của bạn là đảm bảo liệu hai danh sách có cùng yếu tố hay không, sau đó theo tôi, sau đây sẽ là cách tiếp cận tốt nhất:-

if ((len(list1) == len(list2)) and (all(i in list2 for i in list1))): print 'True' else: print 'False'

Phần mã trên sẽ hoạt động theo nhu cầu của bạn, tức là tất cả các yếu tố của List1 nằm trong danh sách2 và ngược lại. Các yếu tố trong cả hai danh sách không cần phải theo cùng một thứ tự.Elements in both the lists need not to be in the same order.

Nhưng nếu bạn muốn chỉ kiểm tra xem tất cả các yếu tố của List1 có mặt trong List2 hay không, thì bạn chỉ cần sử dụng phần mã dưới đây:-

if all(i in list2 for i in list1): print 'True' else: print 'False'

Sự khác biệt là, sau này sẽ in đúng, nếu List2 chứa một số yếu tố bổ sung cùng với tất cả các yếu tố của List1. Nói một cách đơn giản, nó sẽ đảm bảo rằng tất cả các yếu tố của List1 nên có trong List2, bất kể List2 có một số yếu tố bổ sung hay không.

Đã trả lời ngày 22 tháng 1 năm 2015 lúc 12:55Jan 22, 2015 at 12:55

Đâ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,

  1. Bạn có thể kiểm tra xem hai danh sách có bằng nhau không?
  2. Chúng ta có thể câu lạc bộ phương thức Python Sắp xếp () 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.

Làm thế nào để bạn tìm thấy sự bình đẳng của hai danh sách?

Sử dụng phương thức list.sort () sắp xếp hai danh sách và toán tử == so sánh hai mục danh sách theo mục có nghĩa là chúng có các mục dữ liệu bằng nhau ở vị trí bằng nhau. Điều này kiểm tra xem danh sách có chứa các giá trị mục dữ liệu bằng nhau nhưng nó không tính đến thứ tự của các phần tử trong danh sách.

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.

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]

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,

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.

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,

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ó,

l1 = [['a',1], ['b',2], ['c',3]] l2 = [['b',2], ['c',3], ['a',1]] print sorted(l1) == sorted(l2) 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ụ,

l1 = [['a',1], ['b',2], ['c',3]] l2 = [['b',2], ['c',3], ['a',1]] print sorted(l1) == sorted(l2) 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 yếu tố không. Ví dụ,

l1 = [['a',1], ['b',2], ['c',3]] l2 = [['b',2], ['c',3], ['a',1]] print sorted(l1) == sorted(l2) 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,

l1 = [['a',1], ['b',2], ['c',3]] l2 = [['b',2], ['c',3], ['a',1]] print sorted(l1) == sorted(l2) 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,

l1 = [['a',1], ['b',2], ['c',3]] l2 = [['b',2], ['c',3], ['a',1]] print sorted(l1) == sorted(l2) 6

Đầu ra:

l1 = [['a',1], ['b',2], ['c',3]] l2 = [['b',2], ['c',3], ['a',1]] print sorted(l1) == sorted(l2) 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

l1 = [['a',1], ['b',2], ['c',3]] l2 = [['b',2], ['c',3], ['a',1]] print sorted(l1) == sorted(l2) 8

Đầu ra:

l1 = [['a',1], ['b',2], ['c',3]] l2 = [['b',2], ['c',3], ['a',1]] print sorted(l1) == sorted(l2) 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.

True 0

Đầu ra:

True 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 (),

True 2

Đầu ra:

True 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

True 4

Đầu ra:

l1 = [['a',1], ['b',2], ['c',3]] l2 = [['b',2], ['c',3], ['a',1]] print sorted(l1) == sorted(l2) 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.

True 0

Đầu ra:

True 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,

True 8

Đầu ra:

True 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,

>>> l1 = [['a',1], ['b',2], ['c',3]] >>> l2 = [['b',2], ['c',3], ['a',1]] >>> print set(map(tuple,l1)) == set(map(tuple,l2)) True 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,

>>> l1 = [['a',1], ['b',2], ['c',3]] >>> l2 = [['b',2], ['c',3], ['a',1]] >>> print set(map(tuple,l1)) == set(map(tuple,l2)) True 1

Đầu ra:

l1 = [['a',1], ['b',2], ['c',3]] l2 = [['b',2], ['c',3], ['a',1]] print sorted(l1) == sorted(l2) 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,

>>> l1 = [['a',1], ['b',2], ['c',3]] >>> l2 = [['b',2], ['c',3], ['a',1]] >>> print set(map(tuple,l1)) == set(map(tuple,l2)) True 3

Đầu ra:

>>> l1 = [['a',1], ['b',2], ['c',3]] >>> l2 = [['b',2], ['c',3], ['a',1]] >>> print set(map(tuple,l1)) == set(map(tuple,l2)) True 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.

Chúng ta có thể câu lạc bộ phương thức Python Sắp xếp () 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.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 tìm thấy sự bình đẳng của hai danh sách?

Sử dụng phương thức list.sort () sắp xếp hai danh sách và toán tử == so sánh hai mục danh sách theo mục có nghĩa là chúng có các mục dữ liệu bằng nhau ở vị trí bằng nhau.Điều này kiểm tra xem danh sách có chứa các giá trị mục dữ liệu bằng nhau nhưng nó không tính đến thứ tự của các phần tử trong danh sách. sort() method sorts the two lists and the == operator compares the two lists item by item which means they have equal data items at equal positions. This checks if the list contains equal data item values but it does not take into account the order of elements in the list.

Chủ đề