Tôi cần tạo tất cả các cặp có thể, nhưng với ràng buộc rằng một cặp đôi cụ thể chỉ xảy ra một lần trong kết quả. Ví dụ:Tạo tất cả các hoán vị cặp duy nhất
import itertools
for perm in itertools.permutations(range(9)):
print zip(perm[::2], perm[1::2])
tạo tất cả các hoán vị hai cặp có thể có; đây là một tập con nhỏ của đầu ra:
...
[(8, 4), (7, 6), (5, 3), (0, 2)]
[(8, 4), (7, 6), (5, 3), (1, 0)]
[(8, 4), (7, 6), (5, 3), (1, 2)]
[(8, 4), (7, 6), (5, 3), (2, 0)]
[(8, 4), (7, 6), (5, 3), (2, 1)]
[(8, 5), (0, 1), (2, 3), (4, 6)]
[(8, 5), (0, 1), (2, 3), (4, 7)]
[(8, 5), (0, 1), (2, 3), (6, 4)]
[(8, 5), (0, 1), (2, 3), (6, 7)]
[(8, 5), (0, 1), (2, 3), (7, 4)]
[(8, 5), (0, 1), (2, 3), (7, 6)]
[(8, 5), (0, 1), (2, 4), (3, 6)]
[(8, 5), (0, 1), (2, 4), (3, 7)]
[(8, 5), (0, 1), (2, 4), (6, 3)]
...
Làm cách nào để lọc thêm nó để tôi chỉ thấy (8.4) một lần (trong suốt tất cả các hoán vị đã lọc) và (8.5) chỉ một lần và (0,1) chỉ một lần, và (4,7) chỉ một lần, vv?
Về cơ bản, tôi muốn các hoán vị sao cho mỗi kết hợp hai phần tử chỉ xảy ra một lần.
Tôi sẽ đặt cược có một công cụ bổ sung có thể giải quyết vấn đề này nhưng tôi không đủ chuyên môn để biết nó là gì.
Cập nhật: Gareth Rees là chính xác - Tôi hoàn toàn không biết rằng tôi đang cố gắng giải quyết vấn đề round-robin. Tôi có một hạn chế bổ sung đó là những gì tôi đang làm là nhóm người cho các bài tập lập trình cặp. Vì vậy, nếu tôi có một số lượng người lạ, tôi cần phải tạo một nhóm ba người để bao gồm một người kỳ quặc cho mỗi bài tập. Suy nghĩ hiện tại của tôi là (1) làm cho một số người thậm chí bằng cách thêm vào một người vô hình. Sau đó, sau khi ghép nối, tìm người được ghép nối với người vô hình và đặt ngẫu nhiên họ vào một nhóm hiện có để tạo thành một nhóm gồm ba người. Tuy nhiên, tôi tự hỏi nếu không có một thuật toán hoặc điều chỉnh để round-robin mà làm điều này một cách tốt hơn.
Cập nhật 2: Giải pháp của Theodros tạo ra kết quả chính xác mà không có sự ngập ngừng không thích hợp về tôi mô tả ở trên. Mọi người đều rất hữu ích.
Chính xác bạn có ý nghĩa gì khi ghép nối? Bởi một hoán vị? [(0, 1), (2, 3), (4, 5), (6, 7)] thường được gọi là không hoán vị hay ghép nối [0, 1, 2, 3, ..., 8 ]. –
Tôi đã cập nhật câu trả lời của mình cho tài khoản để cập nhật. –