Kết hợp python mà không cần itertools

Có nhiều trường hợp chúng ta phải tìm các kết hợp khác nhau từ các chuỗi đơn lẻ hoặc một bộ số khác

Để tìm các kết hợp như vậy trong Python, chúng ta có mô-đun itertools, mô-đun phổ biến nhất để tìm các kết hợp và hoán vị khác nhau

Mô-đun này là một công cụ rất hiệu quả và hoạt động rất nhanh để tìm tất cả các kết hợp có thể. Nhưng các chức năng mô-đun itertools không phải là phương pháp khả thi duy nhất mà chúng ta có thể sử dụng để tìm các kết hợp

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về các phương pháp khác nhau để chúng ta có thể tìm thấy các kết hợp khác nhau từ một chuỗi trong Python mà không cần sử dụng itertools

Kết hợp trong Python mà không cần sử dụng itertools

Trong phần này, chúng ta sẽ viết các chương trình Python để tìm các kết hợp bằng cách triển khai một số phương thức trong đó. Chúng tôi sẽ sử dụng các phương thức sau trong chương trình Python của chúng tôi

  • Sử dụng phương pháp lặp
  • Sử dụng phương pháp đệ quy

Trong cả hai phương pháp, trước tiên, chúng ta sẽ xem xét chương trình và hiểu nó đang hoạt động, sau đó chúng ta sẽ chuyển sang phần giải thích để hiểu cách triển khai được sử dụng trong đó

Kết hợp Python sử dụng phương pháp lặp

Để thực hiện phương pháp lặp trong chương trình, chúng ta phải nhập thư viện numpy để sử dụng các chức năng của nó. Hãy hiểu ví dụ sau

Ví dụ

đầu ra

Enter an input string to find combinations: JavaTpoint
All possible combinations of three letter sets from the string given by you is: 
[['J', 'a', 'v'], ['J', 'a', 'a'], ['J', 'a', 'T'], ['J', 'a', 'p'], ['J', 'a', 'o'], ['J', 'a', 'i'], ['J', 'a', 'n'], ['J', 'a', 't']]

Giải trình

Chúng tôi đã sử dụng phương pháp lặp trong chương trình trên để tìm các kết hợp từ chuỗi đầu vào

Đầu tiên, chúng tôi đã sử dụng hàm Python mặc định với chuỗi đầu vào và độ dài của tập hợp tổ hợp làm tham số. Sau đó, chúng tôi đã chuyển đổi chuỗi đầu vào thành một Tuple. Chúng tôi cũng đã kiểm tra xem độ dài yêu cầu của tổ hợp không lớn hơn độ dài của chuỗi

Sau đó, chúng ta sử dụng hàm sort[] của numpy để set index cho tuple. Chúng ta sẽ lặp lại bộ dữ liệu với biến chỉ mục

Sau đó, chúng tôi lặp lại bộ dữ liệu bằng cách sử dụng vòng lặp for ngược và một vòng lặp for khác bên trong vòng lặp while. Sau khi lặp lại trong các vòng lặp, chúng tôi đã tạo ra các kết hợp có thể có của độ dài cần thiết

Sau đó, chúng tôi đã lấy một chuỗi đầu vào từ người dùng. Cuối cùng, chúng tôi đã trả về các kết hợp của ba bộ từ chuỗi đầu vào

Kết hợp Python sử dụng phương pháp đệ quy

Trong cách tiếp cận phương pháp đệ quy, chúng ta sẽ lặp qua danh sách bằng cách bao gồm danh sách các chuỗi. Hãy hiểu ví dụ sau

Ví dụ

đầu ra

Enter an input string to find combinations: Python
All possible combinations of three letter sets from the string given by you is: 
[['P', 'y', 't'], ['P', 'y', 'h'], ['P', 'y', 'o'], ['P', 'y', 'n'], ['P', 't', 'h'], ['P', 't', 'o'], ['P', 't', 'n'], ['P', 'h', 'o'], ['P', 'h', 'n'], ['P', 'o', 'n'], ['y', 't', 'h'], ['y', 't', 'o'], ['y', 't', 'n'], ['y', 'h', 'o'], ['y', 'h', 'n'], ['y', 'o', 'n'], ['t', 'h', 'o'], ['t', 'h', 'n'], ['t', 'o', 'n'], ['h', 'o', 'n']]

Giải trình

Trong chương trình trên, khi triển khai cách tiếp cận đệ quy, chúng tôi chưa sử dụng bất kỳ mô-đun cụ thể nào của Python. Giống như phương thức lặp, chúng tôi đã sử dụng một hàm mặc định để triển khai phương thức đệ quy trong mã

Trong chương trình này, chúng tôi đã sử dụng một điều kiện để kiểm tra xem độ dài yêu cầu của tổ hợp. Sau đó, chúng tôi đã sử dụng phương thức đệ quy bên trong hàm với vòng lặp for. Sau khi sử dụng phương thức đệ quy, chúng tôi đã trả về các kết hợp có độ dài cần thiết từ chuỗi đầu vào. Cuối cùng, chúng tôi lấy chuỗi làm đầu vào từ người dùng và trả về các kết hợp của ba bộ ở đầu ra

Trong hướng dẫn này, bạn sẽ học cách sử dụng Python để tìm tất cả các hoán vị của một chuỗi, bao gồm sử dụng

[[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 2, 1], [1, 2, 2], [1, 2, 3], [1, 3, 1],
 [1, 3, 2], [1, 3, 3], [2, 1, 1], [2, 1, 2], [2, 1, 3], [2, 2, 1], [2, 2, 2],
 [2, 2, 3], [2, 3, 1], [2, 3, 2], [2, 3, 3], [3, 1, 1], [3, 1, 2], [3, 1, 3], 
[3, 2, 1], [3, 2, 2], [3, 2, 3], [3, 3, 1], [3, 3, 2], [3, 3, 3]]
0, đệ quy và vòng lặp Python for. Bạn cũng sẽ học cách tìm tất cả các kết hợp của một chuỗi khi cho phép thay thế các chữ cái riêng lẻ

Nhưng một hoán vị là gì? . Vì vậy, ví dụ, chuỗi

[[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 2, 1], [1, 2, 2], [1, 2, 3], [1, 3, 1],
 [1, 3, 2], [1, 3, 3], [2, 1, 1], [2, 1, 2], [2, 1, 3], [2, 2, 1], [2, 2, 2],
 [2, 2, 3], [2, 3, 1], [2, 3, 2], [2, 3, 3], [3, 1, 1], [3, 1, 2], [3, 1, 3], 
[3, 2, 1], [3, 2, 2], [3, 2, 3], [3, 3, 1], [3, 3, 2], [3, 3, 3]]
2 cũng có thể được viết là
[[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 2, 1], [1, 2, 2], [1, 2, 3], [1, 3, 1],
 [1, 3, 2], [1, 3, 3], [2, 1, 1], [2, 1, 2], [2, 1, 3], [2, 2, 1], [2, 2, 2],
 [2, 2, 3], [2, 3, 1], [2, 3, 2], [2, 3, 3], [3, 1, 1], [3, 1, 2], [3, 1, 3], 
[3, 2, 1], [3, 2, 2], [3, 2, 3], [3, 3, 1], [3, 3, 2], [3, 3, 3]]
3

Câu trả lời nhanh. Người dùng Itertools để tìm tất cả các hoán vị của một chuỗi

Trả lời nhanh – Tìm tất cả các hoán vị của một chuỗi trong Python
  • Hoán vị của một chuỗi là gì?
  • Sử dụng Itertools trong Python để tìm tất cả các hoán vị của chuỗi
  • Sử dụng đệ quy trong Python để tìm tất cả các hoán vị của chuỗi
  • Hoán vị với sự lặp lại của một chuỗi trong Python
  • Phần kết luận

Hoán vị của một chuỗi đề cập đến tất cả các thứ tự khác nhau mà một chuỗi có thể thực hiện. Ví dụ, hãy xem một chuỗi có ba chữ cái.

[[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 2, 1], [1, 2, 2], [1, 2, 3], [1, 3, 1],
 [1, 3, 2], [1, 3, 3], [2, 1, 1], [2, 1, 2], [2, 1, 3], [2, 2, 1], [2, 2, 2],
 [2, 2, 3], [2, 3, 1], [2, 3, 2], [2, 3, 3], [3, 1, 1], [3, 1, 2], [3, 1, 3], 
[3, 2, 1], [3, 2, 2], [3, 2, 3], [3, 3, 1], [3, 3, 2], [3, 3, 3]]
4. Khi chúng tôi tìm thấy tất cả các hoán vị của chuỗi này, chúng tôi sẽ trả về danh sách sau.
[[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 2, 1], [1, 2, 2], [1, 2, 3], [1, 3, 1],
 [1, 3, 2], [1, 3, 3], [2, 1, 1], [2, 1, 2], [2, 1, 3], [2, 2, 1], [2, 2, 2],
 [2, 2, 3], [2, 3, 1], [2, 3, 2], [2, 3, 3], [3, 1, 1], [3, 1, 2], [3, 1, 3], 
[3, 2, 1], [3, 2, 2], [3, 2, 3], [3, 3, 1], [3, 3, 2], [3, 3, 3]]
3. Chúng ta có thể thấy ở đây, rằng chúng ta có một danh sách chứa sáu mục

Chúng ta thực sự có thể tính toán số lượng hoán vị mà một chuỗi sẽ có đối với bất kỳ cường độ độ dài nào, bằng cách tính giai thừa của độ dài của nó. Vì vậy, trong ví dụ của chúng tôi về

[[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 2, 1], [1, 2, 2], [1, 2, 3], [1, 3, 1],
 [1, 3, 2], [1, 3, 3], [2, 1, 1], [2, 1, 2], [2, 1, 3], [2, 2, 1], [2, 2, 2],
 [2, 2, 3], [2, 3, 1], [2, 3, 2], [2, 3, 3], [3, 1, 1], [3, 1, 2], [3, 1, 3], 
[3, 2, 1], [3, 2, 2], [3, 2, 3], [3, 3, 1], [3, 3, 2], [3, 3, 3]]
4, chúng tôi sẽ tính giá trị của
[[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 2, 1], [1, 2, 2], [1, 2, 3], [1, 3, 1],
 [1, 3, 2], [1, 3, 3], [2, 1, 1], [2, 1, 2], [2, 1, 3], [2, 2, 1], [2, 2, 2],
 [2, 2, 3], [2, 3, 1], [2, 3, 2], [2, 3, 3], [3, 1, 1], [3, 1, 2], [3, 1, 3], 
[3, 2, 1], [3, 2, 2], [3, 2, 3], [3, 3, 1], [3, 3, 2], [3, 3, 3]]
7, mà thực tế đánh giá là
[[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 2, 1], [1, 2, 2], [1, 2, 3], [1, 3, 1],
 [1, 3, 2], [1, 3, 3], [2, 1, 1], [2, 1, 2], [2, 1, 3], [2, 2, 1], [2, 2, 2],
 [2, 2, 3], [2, 3, 1], [2, 3, 2], [2, 3, 3], [3, 1, 1], [3, 1, 2], [3, 1, 3], 
[3, 2, 1], [3, 2, 2], [3, 2, 3], [3, 3, 1], [3, 3, 2], [3, 3, 3]]
8

Bây giờ bạn đã hiểu ý nghĩa của việc tạo tất cả các kết hợp của một chuỗi trong Python, hãy xem cách chúng ta có thể dễ dàng tạo các hoán vị khác nhau của một chuỗi

Itertools là một công cụ Python tích hợp, tuyệt vời cho phép bạn thực hiện dễ dàng các vấn đề liên quan đến iterables. Dù bạn có tin hay không, các chuỗi trong Python là các đối tượng có thể lặp lại. Do đó, chúng ta có thể dễ dàng lặp lại các chuỗi của mình bằng thư viện

[[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 2, 1], [1, 2, 2], [1, 2, 3], [1, 3, 1],
 [1, 3, 2], [1, 3, 3], [2, 1, 1], [2, 1, 2], [2, 1, 3], [2, 2, 1], [2, 2, 2],
 [2, 2, 3], [2, 3, 1], [2, 3, 2], [2, 3, 3], [3, 1, 1], [3, 1, 2], [3, 1, 3], 
[3, 2, 1], [3, 2, 2], [3, 2, 3], [3, 3, 1], [3, 3, 2], [3, 3, 3]]
0

Trên thực tế, thư viện itertools có chức năng gọi là

Enter an input string to find combinations: Python
All possible combinations of three letter sets from the string given by you is: 
[['P', 'y', 't'], ['P', 'y', 'h'], ['P', 'y', 'o'], ['P', 'y', 'n'], ['P', 't', 'h'], ['P', 't', 'o'], ['P', 't', 'n'], ['P', 'h', 'o'], ['P', 'h', 'n'], ['P', 'o', 'n'], ['y', 't', 'h'], ['y', 't', 'o'], ['y', 't', 'n'], ['y', 'h', 'o'], ['y', 'h', 'n'], ['y', 'o', 'n'], ['t', 'h', 'o'], ['t', 'h', 'n'], ['t', 'o', 'n'], ['h', 'o', 'n']]
10. Chúng tôi chuyển vào một lần lặp, trong trường hợp này là một chuỗi, hàm trả về một danh sách tất cả các kết hợp có thể

Hãy xem chuỗi ví dụ của chúng tôi và cách chúng tôi có thể sử dụng thư viện itertools để tính toán các hoán vị của nó

Enter an input string to find combinations: Python
All possible combinations of three letter sets from the string given by you is: 
[['P', 'y', 't'], ['P', 'y', 'h'], ['P', 'y', 'o'], ['P', 'y', 'n'], ['P', 't', 'h'], ['P', 't', 'o'], ['P', 't', 'n'], ['P', 'h', 'o'], ['P', 'h', 'n'], ['P', 'o', 'n'], ['y', 't', 'h'], ['y', 't', 'o'], ['y', 't', 'n'], ['y', 'h', 'o'], ['y', 'h', 'n'], ['y', 'o', 'n'], ['t', 'h', 'o'], ['t', 'h', 'n'], ['t', 'o', 'n'], ['h', 'o', 'n']]
2

Hãy xem những gì chúng tôi đã làm ở đây

  1. Chúng tôi đã nhập thư viện itertools
  2. Chúng tôi đã tải chuỗi của mình và gán nó cho biến
    Enter an input string to find combinations: Python
    All possible combinations of three letter sets from the string given by you is: 
    [['P', 'y', 't'], ['P', 'y', 'h'], ['P', 'y', 'o'], ['P', 'y', 'n'], ['P', 't', 'h'], ['P', 't', 'o'], ['P', 't', 'n'], ['P', 'h', 'o'], ['P', 'h', 'n'], ['P', 'o', 'n'], ['y', 't', 'h'], ['y', 't', 'o'], ['y', 't', 'n'], ['y', 'h', 'o'], ['y', 'h', 'n'], ['y', 'o', 'n'], ['t', 'h', 'o'], ['t', 'h', 'n'], ['t', 'o', 'n'], ['h', 'o', 'n']]
    
    11
  3. Sau đó, chúng tôi đã sử dụng hàm
    Enter an input string to find combinations: Python
    All possible combinations of three letter sets from the string given by you is: 
    [['P', 'y', 't'], ['P', 'y', 'h'], ['P', 'y', 'o'], ['P', 'y', 'n'], ['P', 't', 'h'], ['P', 't', 'o'], ['P', 't', 'n'], ['P', 'h', 'o'], ['P', 'h', 'n'], ['P', 'o', 'n'], ['y', 't', 'h'], ['y', 't', 'o'], ['y', 't', 'n'], ['y', 'h', 'o'], ['y', 'h', 'n'], ['y', 'o', 'n'], ['t', 'h', 'o'], ['t', 'h', 'n'], ['t', 'o', 'n'], ['h', 'o', 'n']]
    
    12 để tạo đối tượng itertools
  4. Chúng tôi đã biến đối tượng này thành một danh sách, danh sách này trả về một danh sách các bộ chứa các hoán vị của chúng tôi
  5. Cuối cùng, chúng tôi đã sử dụng cách hiểu danh sách để kết hợp các hoán vị của chúng tôi thành các chuỗi riêng lẻ

Trong phần tiếp theo, bạn sẽ học cách sử dụng đệ quy để tìm các tổ hợp của một chuỗi trong Python

Bạn muốn tìm hiểu thêm về cách hiểu danh sách Python? . Thêm một người học trực quan, hãy xem hướng dẫn YouTube của tôi tại đây

Sử dụng đệ quy trong Python để tìm tất cả các hoán vị của chuỗi

Khái niệm chúng ta sẽ sử dụng trong đệ quy để tạo hoán vị được gọi là quay lui. Ý tưởng là chúng tôi quay lại cho từng kết hợp có thể tồn tại

Chúng ta hãy xem phương thức đệ quy này hoạt động như thế nào để giúp tìm tất cả các kết hợp của một chuỗi trong Python

Enter an input string to find combinations: Python
All possible combinations of three letter sets from the string given by you is: 
[['P', 'y', 't'], ['P', 'y', 'h'], ['P', 'y', 'o'], ['P', 'y', 'n'], ['P', 't', 'h'], ['P', 't', 'o'], ['P', 't', 'n'], ['P', 'h', 'o'], ['P', 'h', 'n'], ['P', 'o', 'n'], ['y', 't', 'h'], ['y', 't', 'o'], ['y', 't', 'n'], ['y', 'h', 'o'], ['y', 'h', 'n'], ['y', 'o', 'n'], ['t', 'h', 'o'], ['t', 'h', 'n'], ['t', 'o', 'n'], ['h', 'o', 'n']]
5

Chúng ta có thể thấy rằng điều này trả về giống như trên. Tuy nhiên, việc theo dõi đối với người dùng Python mới bắt đầu sẽ kém trực quan hơn một chút, vì vậy có lẽ sử dụng phương thức itertools có thể được ưu tiên hơn để dễ đọc. Tuy nhiên, phương pháp này hữu ích khi bạn không thể sử dụng itertools vì lý do nào đó

Bạn muốn tìm hiểu cách sử dụng hàm

Enter an input string to find combinations: Python
All possible combinations of three letter sets from the string given by you is: 
[['P', 'y', 't'], ['P', 'y', 'h'], ['P', 'y', 'o'], ['P', 'y', 'n'], ['P', 't', 'h'], ['P', 't', 'o'], ['P', 't', 'n'], ['P', 'h', 'o'], ['P', 'h', 'n'], ['P', 'o', 'n'], ['y', 't', 'h'], ['y', 't', 'o'], ['y', 't', 'n'], ['y', 'h', 'o'], ['y', 'h', 'n'], ['y', 'o', 'n'], ['t', 'h', 'o'], ['t', 'h', 'n'], ['t', 'o', 'n'], ['h', 'o', 'n']]
13 của Python để lặp qua hai danh sách?

Hoán vị với sự lặp lại của một chuỗi trong Python

Trong các ví dụ trên, chúng tôi đã sử dụng Python để tìm tất cả các kết hợp của một chuỗi mà không cần lặp lại. Trong phần này, bạn sẽ học cách sử dụng Python để lấy tất cả các hoán vị của một chuỗi có lặp lại

Điều này có thể dễ dàng thực hiện bằng cách sử dụng vòng lặp Python for

Hãy xem một ví dụ, sử dụng cùng một chuỗi mà chúng ta đã sử dụng trước đây,

[[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 2, 1], [1, 2, 2], [1, 2, 3], [1, 3, 1],
 [1, 3, 2], [1, 3, 3], [2, 1, 1], [2, 1, 2], [2, 1, 3], [2, 2, 1], [2, 2, 2],
 [2, 2, 3], [2, 3, 1], [2, 3, 2], [2, 3, 3], [3, 1, 1], [3, 1, 2], [3, 1, 3], 
[3, 2, 1], [3, 2, 2], [3, 2, 3], [3, 3, 1], [3, 3, 2], [3, 3, 3]]
4

Enter an input string to find combinations: Python
All possible combinations of three letter sets from the string given by you is: 
[['P', 'y', 't'], ['P', 'y', 'h'], ['P', 'y', 'o'], ['P', 'y', 'n'], ['P', 't', 'h'], ['P', 't', 'o'], ['P', 't', 'n'], ['P', 'h', 'o'], ['P', 'h', 'n'], ['P', 'o', 'n'], ['y', 't', 'h'], ['y', 't', 'o'], ['y', 't', 'n'], ['y', 'h', 'o'], ['y', 'h', 'n'], ['y', 'o', 'n'], ['t', 'h', 'o'], ['t', 'h', 'n'], ['t', 'o', 'n'], ['h', 'o', 'n']]
9

Trong đoạn mã trên, chúng tôi sử dụng vòng lặp for và khả năng hiểu danh sách để trả về tất cả các kết hợp của chuỗi Python có lặp lại

Đoạn mã trên có thể trở nên khá tốn tài nguyên. Chúng ta cũng có thể thấy ở đây rằng chúng ta có nhiều kết hợp hơn nhiều lần khi chúng ta sử dụng phép lặp so với khi chúng ta không sử dụng.

Bạn muốn tìm hiểu thêm về các vòng lặp Python? . Thay vào đó, bạn muốn xem một video?

Phần kết luận

Trong bài đăng này, bạn đã học cách sử dụng Python để tạo danh sách tất cả các hoán vị của một chuỗi. Bạn đã học cách thực hiện việc này bằng cách sử dụng thư viện

[[1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 2, 1], [1, 2, 2], [1, 2, 3], [1, 3, 1],
 [1, 3, 2], [1, 3, 3], [2, 1, 1], [2, 1, 2], [2, 1, 3], [2, 2, 1], [2, 2, 2],
 [2, 2, 3], [2, 3, 1], [2, 3, 2], [2, 3, 3], [3, 1, 1], [3, 1, 2], [3, 1, 3], 
[3, 2, 1], [3, 2, 2], [3, 2, 3], [3, 3, 1], [3, 3, 2], [3, 3, 3]]
0 phổ biến cũng như sử dụng đệ quy. Sau đó, bạn đã học cách sử dụng vòng lặp for trong Python để tạo danh sách tất cả các kết hợp của một chuỗi khi cho phép lặp lại

Để tìm hiểu thêm về hàm

Enter an input string to find combinations: Python
All possible combinations of three letter sets from the string given by you is: 
[['P', 'y', 't'], ['P', 'y', 'h'], ['P', 'y', 'o'], ['P', 'y', 'n'], ['P', 't', 'h'], ['P', 't', 'o'], ['P', 't', 'n'], ['P', 'h', 'o'], ['P', 'h', 'n'], ['P', 'o', 'n'], ['y', 't', 'h'], ['y', 't', 'o'], ['y', 't', 'n'], ['y', 'h', 'o'], ['y', 'h', 'n'], ['y', 'o', 'n'], ['t', 'h', 'o'], ['t', 'h', 'n'], ['t', 'o', 'n'], ['h', 'o', 'n']]
17, hãy xem tài liệu chính thức

Làm cách nào để bạn có được tất cả các kết hợp của một chuỗi trong Python?

Để tìm tất cả các hoán vị có thể có của một chuỗi đã cho, bạn có thể sử dụng mô-đun itertools có một phương thức hữu ích gọi là hoán vị[có thể lặp lại[, r]]. This method return successive r length permutations of elements in the iterable as tuples.

Làm thế nào để bạn tìm thấy tất cả các kết hợp có thể có của một chuỗi?

Thuật toán được sao chép bên dưới. void connect[String instr, StringBuffer outstr, int index] { for [int i = index; i < instr. chiều dài[];

Chủ Đề