Làm thế nào để bạn tìm thấy giao điểm của hai danh sách python?

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 nhau

Cá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ợp

Các mục không cần phải khác biệt

.intersection[]
7 không sao đâu

Cá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ợp

Cá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

Làm cách nào để tìm giao điểm của nhiều hơn hai danh sách trong Python?

Giải pháp. Để cắt một danh sách các tập hợp, hãy sử dụng chiến lược sau. .
Lấy phần tử đầu tiên từ danh sách làm điểm bắt đầu. .
Gọi phương thức giao nhau [] trên đối tượng được đặt đầu tiên
Chuyển tất cả các tập hợp làm đối số vào phương thức giao nhau[] bằng cách giải nén danh sách bằng toán tử *list

Giao điểm [] Python là gì?

Python Đặt giao điểm [] . Nghĩa. Bộ được trả về chỉ chứa các mục tồn tại trong cả hai bộ hoặc trong tất cả các bộ nếu so sánh được thực hiện với nhiều hơn hai bộ. returns a set that contains the similarity between two or more sets. Meaning: The returned set contains only items that exist in both sets, or in all sets if the comparison is done with more than two sets.

Chủ Đề