Tôi có một danh sách với một số thành phần và muốn lặp qua tất cả các cách có thể để chia danh sách này thành hai danh sách. Bởi vì tôi có nghĩa là tất cả các kết hợp, do đó, thứ tự không quan trọng (tức là Element 1 và 3 có thể nằm trong một danh sách và Element 2 trong danh sách kia). Hiện nay tôi làm điều đó như thế này, nơi facs
là danh sách ban đầu của tôi:Tất cả các khả năng chia danh sách thành hai danh sách
patterns = []
for i in range(2**(len(facs)-1)):
pattern = []
for j in range((len(facs)-1)):
pattern.append(i//(2**j)%2)
patterns.append(pattern)
for pattern in patterns:
l1 = [facs[-1]]
l2 = []
for i in range(len(pattern)):
if pattern[i] == 1:
l1.append(facs[i])
else:
l2.append(facs[i])
Vì vậy, tôi về cơ bản tạo ra một danh sách dài 2^(len(facs)-1)
và điền nó với tất cả các kết hợp có thể có của những người thân và số không. Sau đó tôi 'che phủ' mọi mẫu với facs
, ngoại trừ phần tử cuối cùng của facs
luôn ở trong l1
, như tôi sẽ nhận được mọi kết quả hai lần, vì tôi xử lý hai danh sách giống nhau, bất kể danh sách nào là l1
hoặc l2
.
Có cách nào nhanh hơn và thanh lịch hơn (ngắn hơn/nhiều hơn) để thực hiện việc này không?
Đã thấy câu trả lời này? [nhập mô tả liên kết tại đây] (http://stackoverflow.com/questions/752308/split-list-into-smaller-lists) –
Bạn có ý nghĩa gì bởi tất cả các cách có thể? Các hoán vị, kết hợp hoặc tách danh sách duy trì thứ tự của phần tử? –
@IssamElyazidi Có, tôi đã thấy chuỗi đó. Không trả lời câu hỏi của tôi tho. – PattuX