Bài đăng này giải thích mã cho từng phương pháp và thảo luận về các yếu tố khác nhau cần xem xét khi quyết định sử dụng phương pháp nào
Đối với câu hỏi thực hành của chúng tôi, chúng tôi sẽ làm việc trên một chức năng tìm giao điểm của hai danh sách với các mục trùng lặp trong mỗi danh sách. Chẳng hạn, nếu chúng ta chuyển các danh sách
[3, 4, 5]8 và
[3, 4, 5]9 cho hàm, thì nó sẽ trả về danh sách
.intersection[]0
Mục lục
Sử dụng các bộ để tìm giao điểm của hai danh sách trong Python
Phương pháp đầu tiên để tìm giao điểm của hai danh sách trong Python là chuyển đổi danh sách thành tập hợp và sử dụng toán tử
.intersection[]1 hoặc phương thức
.intersection[]2 tích hợp
Nhưng trước tiên, một tập hợp là gì?
Một tập hợp tương tự như một danh sách, ở chỗ nó có thể được sử dụng để lưu trữ một tập hợp các mục [chẳng hạn như tập hợp các số]
Chẳng hạn, chúng ta có thể tạo một bộ để lưu trữ các số 1, 22, 43, 64 và 57
Để làm điều đó, chúng tôi sử dụng dấu ngoặc nhọn, như trong ví dụ bên dưới
mySet = {1, 22, 43, 64, 57}
Như bạn có thể thấy, việc tạo một tập hợp rất giống với việc tạo một danh sách, ngoại trừ việc cái trước sử dụng dấu ngoặc nhọn trong khi cái sau sử dụng dấu ngoặc vuông
Một bộ thực sự rất giống với một danh sách. Tuy nhiên, có một số điểm khác biệt chính giữa chúng, như được giải thích trong bảng bên dưới
Sự khác biệt chính giữa một tập hợp và một danh sách
ListSetItems được sắp xếp [i. e. thứ tự của các mục là quan trọng]Do đó,
.intersection[]3 và
.intersection[]4 được coi là hai danh sách khác nhauCác mặt hàng không được đặt hàng [tôi. e. thứ tự của các mục bị bỏ qua]
Do đó,
.intersection[]5 và
.intersection[]6 được coi là cùng một tập hợpCác mục không cần phải khác biệt
.intersection[]7 không sao đâuCác mục phải khác biệt
.intersection[]8 gây ra lỗi cho chúng tôi vì số 1 xuất hiện nhiều lần trong tập hợpCác mục không cần có thể băm*Các mục phải có thể băm*
Ví dụ về các mục có thể băm bao gồm số nguyên, số dấu phẩy động và chuỗi
Ví dụ về các mục không thể băm được bao gồm danh sách hoặc từ điển lồng nhau
- Các mục có thể băm đề cập đến các mục có giá trị băm không bao giờ thay đổi trong suốt thời gian tồn tại của nó. Một cuộc thảo luận đầy đủ về điều này nằm ngoài phạm vi của hướng dẫn này. Nếu bạn quan tâm, bạn có thể xem tài liệu chính thức tại
Để tìm giao điểm của hai danh sách trong Python, chúng ta có thể chuyển đổi danh sách thành tập hợp và sử dụng toán tử
.intersection[]1 tích hợp sẵn hoặc phương thức
.intersection[]2
Hãy xem xét một số ví dụ
Chuyển đổi danh sách thành tập hợp và sử dụng toán tử &
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]
Ở đây, trước tiên chúng tôi khai báo hai danh sách –
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1 và
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2 – trên dòng 1 và 2
Tiếp theo, ở dòng 4 và 5, chúng ta sử dụng hàm
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]3 để chuyển đổi danh sách thành tập hợp
Ở dòng 7, chúng ta sử dụng toán tử
.intersection[]1 để tìm giao giữa hai tập hợp. Toán tử này trả về một tập hợp mới có các phần tử chung cho cả
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]5 và
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]6. Chúng tôi chuyển tập hợp kết quả này cho hàm
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]7 để chuyển đổi nó trở lại danh sách và gán danh sách kết quả cho
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]8
Cuối cùng, chúng tôi in giá trị của
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]8 trên dòng 9
Nếu bạn chạy mã ở trên, bạn sẽ nhận được đầu ra sau
[3, 4, 5]
Chuyển đổi danh sách thành tập hợp và sử dụng phương thức giao nhau []
Tiếp theo, hãy xem một ví dụ sử dụng phương pháp
.intersection[]2
Mặc dù toán tử
.intersection[]1 chỉ có thể được sử dụng trên hai bộ, phương thức
.intersection[]2 có thể được sử dụng với các loại lặp khác, chẳng hạn như danh sách hoặc bộ
Cú pháp của nó như sau
.intersection[]
Hãy xem một ví dụ
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]
Ở đây, chúng tôi chỉ chuyển đổi
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1 thành một tập hợp. Điều này là do chúng ta có thể chuyển một danh sách [e. g.
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2] trực tiếp vào phương thức
.intersection[]2 mà không phải chuyển đổi danh sách thành tập hợp
Chúng tôi làm điều đó trên dòng 6, nơi chúng tôi sử dụng
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]5 để gọi phương thức
.intersection[]2 và chuyển
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2 làm đối số cho phương thức
Phương thức này trả về một tập hợp. Chúng tôi chuyển đổi tập hợp trở lại danh sách bằng cách sử dụng hàm
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]7 và gán kết quả cho
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]8
Cuối cùng, chúng tôi in giá trị của
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]8 trên dòng 8
Nếu bạn chạy mã ở trên, bạn sẽ nhận được đầu ra sau
[3, 4, 5]
Lỗi khi chuyển đổi danh sách thành tập hợp
Cuối cùng nhưng không kém phần quan trọng, hãy xem một ví dụ mà chúng ta không thể chuyển đổi danh sách thành tập hợp. Điều đó xảy ra khi một hoặc nhiều mục trong danh sách không thể băm được. Ví dụ: nếu danh sách có danh sách lồng nhau [không thể băm], chúng tôi sẽ gặp lỗi khi cố gắng chuyển đổi danh sách thành tập hợp
list1 = [1, 2, 3, 4, 5, [7, 8, 9]] set1 = set[list1]
Nếu bạn chạy mã ở trên, bạn sẽ gặp lỗi sau
Traceback [most recent call last]: File "...", line ..., in set1 = set[list1] TypeError: unhashable type: 'list'
Sử dụng hiểu danh sách
Trong phần trước, chúng ta đã thấy cách chuyển đổi danh sách thành tập hợp và sử dụng toán tử
.intersection[]1 hoặc phương thức
.intersection[]2 để tìm giao điểm của hai danh sách trong Python
Tuy nhiên, chúng tôi cũng đã thấy điều đó có thể thất bại như thế nào khi danh sách của chúng tôi chứa các mục không thể băm được [chẳng hạn như danh sách lồng nhau]
Trong những trường hợp như vậy, chúng ta có thể sử dụng khả năng hiểu danh sách để tìm giao điểm của hai danh sách. Điều này không yêu cầu chúng tôi chuyển đổi bất kỳ danh sách nào thành một tập hợp
Để làm được điều đó, trước hết chúng ta cần hiểu. Nếu bạn không quen với việc hiểu danh sách, bạn có thể muốn tham khảo một số bài viết trước, chẳng hạn như và
Tóm lại, một cách khả thi để sử dụng khả năng hiểu danh sách là sử dụng cú pháp sau
[ ]
Sử dụng khả năng hiểu danh sách để tạo danh sách giao lộ mới
Giả sử chúng ta có hai danh sách –
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1 và
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2
Nếu chúng tôi muốn thêm các mục trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2 vào một danh sách mới có tên là
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]8, chỉ khi mục trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2 cũng nằm trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1, chúng tôi mới có thể sử dụng mã bên dưới
list1 = [1, 2, 3, 4] list2 = [3, 4, 5, 6] intersect = [x for x in list2 if x in list1] print[intersect]
Dòng 4 trong đoạn mã trên cho biết rằng đối với mỗi mục trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2 [
Traceback [most recent call last]: File "...", line ..., in set1 = set[list1] TypeError: unhashable type: 'list'1], hãy thêm mục [
Traceback [most recent call last]: File "...", line ..., in set1 = set[list1] TypeError: unhashable type: 'list'2] vào
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]8 nếu mục đó nằm trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1 [
Traceback [most recent call last]: File "...", line ..., in set1 = set[list1] TypeError: unhashable type: 'list'5]
Nếu bạn chạy mã ở trên, bạn sẽ nhận được đầu ra sau
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]0
Điều này cho chúng ta giao điểm của hai danh sách –
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1 và
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2
Sử dụng khả năng hiểu danh sách để tìm giao điểm của hai danh sách với danh sách lồng nhau
Tiếp theo, hãy xem một ví dụ khác trong đó danh sách chứa danh sách lồng nhau
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]1
Nếu bạn chạy mã ở trên, bạn sẽ nhận được đầu ra sau
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]2
Điều này cho thấy khả năng hiểu danh sách hoạt động ngay cả với danh sách lồng nhau
Sử dụng hàm filter[] tích hợp
Cuối cùng nhưng không kém phần quan trọng, hãy xem phương pháp thứ ba để tìm giao điểm của hai danh sách trong Python – sử dụng hàm
[3, 4, 5]7
Hàm
[3, 4, 5]7 là một hàm tích hợp trong Python chấp nhận hai đối số – một hàm xác định các tiêu chí để lọc và một hàm có thể lặp lại để lọc
Giả sử chúng ta có một danh sách có tên là
[ ]0, được định nghĩa như sau
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]3
Nếu chúng ta muốn lọc tất cả các số chẵn trong danh sách, chúng ta có thể định nghĩa một hàm trả về
[ ]1 khi nó được truyền vào một số chẵn
Sau đó, chúng ta có thể chuyển chức năng này và danh sách
[ ]0 cho chức năng
[3, 4, 5]7
Hãy xem một ví dụ về cách thức hoạt động của nó
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]4
Ở đây, trước tiên chúng tôi xác định danh sách
[ ]0 trên dòng 1
Tiếp theo, chúng ta định nghĩa một hàm có tên là
[ ]5 chấp nhận một đối số
Traceback [most recent call last]: File "...", line ..., in set1 = set[list1] TypeError: unhashable type: 'list'2 và trả về
[ ]1 nếu
Traceback [most recent call last]: File "...", line ..., in set1 = set[list1] TypeError: unhashable type: 'list'2 là số chẵn [i. e. nếu
Traceback [most recent call last]: File "...", line ..., in set1 = set[list1] TypeError: unhashable type: 'list'2 chia cho 2 dư 0]
Tiếp theo, chúng ta gọi hàm
[3, 4, 5]7 trên dòng 7, chuyển tên hàm [
list1 = [1, 2, 3, 4] list2 = [3, 4, 5, 6] intersect = [x for x in list2 if x in list1] print[intersect]1] và tên có thể lặp lại [
[ ]0] cho hàm
Hàm
[3, 4, 5]7 trả về một đối tượng bộ lọc có thể được chuyển đổi thành danh sách, sử dụng hàm
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]7 tích hợp
Chúng tôi làm điều đó trên dòng 7 và gán danh sách kết quả cho một biến có tên là
list1 = [1, 2, 3, 4] list2 = [3, 4, 5, 6] intersect = [x for x in list2 if x in list1] print[intersect]5
Cuối cùng, chúng tôi in các giá trị của
list1 = [1, 2, 3, 4] list2 = [3, 4, 5, 6] intersect = [x for x in list2 if x in list1] print[intersect]5 và
[ ]0 trên dòng 9 và 10
Nếu bạn chạy mã ở trên, bạn sẽ nhận được đầu ra sau
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]5
list1 = [1, 2, 3, 4] list2 = [3, 4, 5, 6] intersect = [x for x in list2 if x in list1] print[intersect]5 chỉ chứa các số chẵn vì đây là các mục trong
[ ]0 đã “vượt qua” tiêu chí bộ lọc, như được xác định bởi hàm
[ ]5
Mặt khác,
[ ]0 không bị thay đổi sau khi chúng ta chuyển nó cho hàm
[3, 4, 5]7
Như đã đề cập trước đây, chúng ta có thể sử dụng hàm
[3, 4, 5]7 để tìm giao điểm của hai danh sách trong Python. Hãy xem xét một số ví dụ
Sử dụng hàm filter[] để tìm giao điểm của hai danh sách trong Python
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]6
Ở đây, trước tiên chúng ta định nghĩa một hàm có tên là
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]04 trên các dòng 4 đến 6. Hàm này trả về
[ ]1 nếu
Traceback [most recent call last]: File "...", line ..., in set1 = set[list1] TypeError: unhashable type: 'list'2 nằm trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1
Tiếp theo, chúng tôi sử dụng chức năng để lọc
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2 trên dòng 8. Chúng tôi cũng chuyển đối tượng bộ lọc kết quả tới hàm
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]7 để chuyển đổi nó thành danh sách
Cuối cùng, chúng tôi in giá trị của danh sách kết quả trên dòng 10
Nếu bạn chạy mã ở trên, bạn sẽ nhận được đầu ra sau
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]0
Sử dụng hàm filter[] với hàm lambda
Tiếp theo, hãy xem thêm một ví dụ về cách sử dụng hàm
[3, 4, 5]7 để tìm giao điểm của hai danh sách trong Python. Lần này, thay vì truyền một hàm đã đặt tên cho hàm, chúng ta sẽ truyền một hàm lambda. Nếu bạn không quen với các hàm lambda, bạn có thể
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]8
Ở đây, hàm lambda là
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]9
Hàm đánh giá biểu thức
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]11 cho mỗi đầu vào
Traceback [most recent call last]: File "...", line ..., in set1 = set[list1] TypeError: unhashable type: 'list'2 và trả về
[ ]1 nếu
Traceback [most recent call last]: File "...", line ..., in set1 = set[list1] TypeError: unhashable type: 'list'2 nằm trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1
Chúng tôi chuyển hàm lambda này cho hàm
[3, 4, 5]7 trên dòng 4 để lọc các mục trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2
Nếu bạn chạy mã ở trên, bạn sẽ nhận được đầu ra sau
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]0
Không có gì đáng ngạc nhiên, ví dụ này cho kết quả đầu ra giống như ví dụ trước vì hàm lambda của nó thực hiện công việc tương tự như hàm
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]04 trong ví dụ trước
Sử dụng phương pháp nào?
Bây giờ chúng tôi đã đề cập đến ba phương pháp khác nhau để tìm giao điểm của hai danh sách trong Python, hãy thảo luận về một số yếu tố cần xem xét khi chọn sử dụng phương pháp nào
Yếu tố đầu tiên cần xem xét là liệu danh sách của bạn có chứa các mục không thể băm được hay không [chẳng hạn như danh sách lồng nhau]
Nếu đúng như vậy, bạn sẽ phải sử dụng khả năng hiểu danh sách hoặc hàm
[3, 4, 5]7
Tiếp theo, yếu tố thứ hai cần xem xét là liệu danh sách của bạn có các mục trùng lặp hay không. Nếu danh sách của bạn có các mục trùng lặp và bạn muốn giao lộ tính đến các mục này thì không có phương pháp nào ở trên là lý tưởng
Hãy xem xét một số ví dụ
[3, 4, 5]1
Nếu bạn chạy mã ở trên, bạn sẽ nhận được đầu ra sau
[3, 4, 5]2
Khi chúng tôi chuyển đổi danh sách thành tập hợp, các mục trùng lặp sẽ bị xóa. Chẳng hạn, nếu
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]20,
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]21 cho chúng ta tập hợp
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]22
Do đó, trong ví dụ đầu tiên ở trên, khi chúng tôi chuyển đổi
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1 và
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2 thành tập hợp và sử dụng toán tử
.intersection[]1 hoặc phương thức
.intersection[]2 để tìm giao của hai tập hợp, tập hợp kết quả không chứa bất kỳ phần tử trùng lặp nào
Do đó, chúng tôi nhận được
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]27 làm đầu ra cho cả
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]28 và
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]29
Tiếp theo, đối với ví dụ thứ hai, lưu ý rằng chúng tôi nhận được một câu trả lời khác cho
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]30 và
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]31?
Điều này là do đối với list1 = [1, 2, 3, 4, 5]
list2 = [3, 4, 5, 6, 7]
set1 = set[list1]
set2 = set[list2]
intersect = list[set1 & set2]
print[intersect]
30, chúng tôi lặp lại thông qua list1 = [1, 2, 3, 4, 5]
list2 = [3, 4, 5, 6, 7]
set1 = set[list1]
intersect = list[set1.intersection[list2]]
print[intersect]
1 để kiểm tra xem mục đó cũng nằm trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2. Mặt khác, đối với
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]31, chúng tôi lặp lại thông qua
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2 để kiểm tra xem mục đó có nằm trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1 không.
Điều này mang lại cho chúng tôi các kết quả khác nhau vì kết quả của
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]30 dựa trên
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1. Do đó, số 3 xuất hiện hai lần trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]30 vì có hai số 3 trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1. Tương tự, số 5 xuất hiện hai lần vì có hai số 5 trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1
Ngược lại, kết quả cho
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]31 dựa trên
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2. Do đó, số 3 xuất hiện ba lần trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]31 trong khi số 5 xuất hiện một lần
Sự khác biệt tương tự trong các câu trả lời có thể được tìm thấy khi chúng ta sử dụng hàm
[3, 4, 5]7 để tìm giao điểm của
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1 và
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2 [tham khảo ví dụ 3]
Nếu chúng tôi không muốn sự khác biệt như vậy trong câu trả lời của mình, chúng tôi sẽ cần viết chức năng của riêng mình
Điều này đưa chúng ta đến câu hỏi thực hành cho ngày hôm nay
câu hỏi thực hành
Câu hỏi thực hành cho ngày hôm nay là viết một hàm tên là
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]49 nhận hai danh sách làm đối số. Chúng ta có thể giả sử rằng hai danh sách chỉ chứa các mục có thể băm
Hàm tìm giao điểm của hai danh sách, dựa trên số lần một mục xuất hiện trong cả hai danh sách .
Chẳng hạn, giả sử chúng ta có các danh sách
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]50 và
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]51, kết quả là hàm của chúng ta sẽ trả về
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]52
Mặc dù 1 xuất hiện ba lần trong danh sách thứ hai, nhưng nó chỉ xuất hiện hai lần trong danh sách đầu tiên. Do đó, 1 xuất hiện hai lần trong giao lộ
Tương tự, mặc dù 2 xuất hiện ba lần trong danh sách đầu tiên nhưng nó chỉ xuất hiện một lần trong danh sách thứ hai. Do đó, 2 xuất hiện một lần trong giao lộ
Như bạn có thể thấy, giao điểm không dựa trên danh sách thứ nhất hoặc thứ hai. Thay vào đó, nó dựa trên số lần một mục xuất hiện trong cả hai danh sách .
Kết quả mong đợi
Để kiểm tra chức năng của bạn, bạn có thể chạy các câu lệnh sau
[3, 4, 5]3
Nếu bạn chạy mã ở trên, bạn sẽ nhận được đầu ra sau
[3, 4, 5]4
gợi ý
Có nhiều hơn một cách để hoàn thành câu hỏi thực hành cho ngày hôm nay. Giải pháp gợi ý sử dụng lớp
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]53 và phương thức
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]54 cho danh sách
Bạn có thể muốn tham khảo các bài viết sau nếu bạn cần trợ giúp
- Cách đếm số lần xuất hiện của các mục trong danh sách
- Sử dụng phương thức mở rộng[]
giải pháp đề xuất
Đây là giải pháp gợi ý cho câu hỏi ngày hôm nay
Nhấp để xem giải pháp được đề xuất
[3, 4, 5]5
Ở đây, trước tiên chúng tôi nhập lớp
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]53 trên dòng 1
Tiếp theo, chúng ta định nghĩa hàm
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]49 từ dòng 3 đến dòng 17
Trong hàm, chúng ta chuyển các đối tượng
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1 và
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2 cho hàm tạo
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]59 và gán các đối tượng
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]53 cho
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]61 và
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]62
Một đối tượng
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]53 cho biết số lần một mục xuất hiện trong một lần lặp
Chẳng hạn,
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]64 cho chúng ta đối tượng
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]53
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]66, vì
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]67 xuất hiện hai lần [
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]68] trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]69 trong khi
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]70 xuất hiện một lần [
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]71]
Nếu chúng ta gán đối tượng này cho một biến, chẳng hạn như
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]72, thì chúng ta có thể truy cập các giá trị trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]72 giống như cách chúng ta truy cập các giá trị trong từ điển
Chẳng hạn,
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]74 cho chúng ta giá trị 2
Trong giải pháp được đề xuất của chúng tôi,
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]61 và
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]62 cung cấp cho chúng tôi tần suất của từng mục trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1 và
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2
Sau khi chúng tôi nhận được tần số này, chúng tôi đã sẵn sàng để tìm giao điểm của hai danh sách. Trước tiên, chúng tôi tìm giao lộ không trùng lặp. Để làm điều đó, chúng tôi chuyển đổi
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1 và
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2 thành bộ và sử dụng toán tử
.intersection[]1 để lấy giao điểm
Tiếp theo, chúng tôi chuyển giao điểm này thành một danh sách và gán danh sách kết quả cho
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]82 [trên dòng 11]
Tiếp theo, chúng tôi khởi tạo một danh sách trống có tên là
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]83
Sau đó, chúng tôi sử dụng vòng lặp
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]84 để lặp qua
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]82 [dòng 14 và 15]
Ở dòng 15,
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]86 và
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]87 cho biết số lần
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]88 xuất hiện lần lượt trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]1 và
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] intersect = list[set1.intersection[list2]] print[intersect]2
Ví dụ, giả sử
[3, 4, 5]6
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]82 bằng với
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]92
Lần đầu tiên vòng lặp
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]84 chạy,
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]88 bằng 1
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]95 cho chúng tôi 2 trong khi
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]96 cho chúng tôi 3
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]97 cho chúng ta số thấp hơn trong hai số, là 2
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]98 mang lại cho chúng tôi
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]99, tương đương với
[3, 4, 5]00
Sau đó, chúng tôi chuyển danh sách này sang phương pháp
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]54 để thêm nó vào
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]83
Chúng tôi tiếp tục làm điều này cho đến khi chúng tôi hoàn thành việc lặp qua tất cả các mục trong
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]82
Khi điều đó xảy ra,
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]83 chứa tất cả các mục trùng lặp mà chúng tôi cần cho giao lộ. Do đó, chúng tôi chỉ cần trả lại
list1 = [1, 2, 3, 4, 5] list2 = [3, 4, 5, 6, 7] set1 = set[list1] set2 = set[list2] intersect = list[set1 & set2] print[intersect]83 trên dòng 17