Tôi muốn tạo tất cả các đường dẫn từ mọi lá đến gốc trong cây. Tôi muốn làm điều đó với máy phát điện, để tiết kiệm bộ nhớ (cây có thể lớn). Đây là mã của tôi:Python (năng suất): tất cả các đường dẫn từ lá này sang gốc khác trên cây
def paths(self, acc=[]):
if self.is_leaf():
yield [self.node]+acc
for child in self.children:
child.paths([self.node]+acc)
Nhưng nó không hoạt động. Tại sao? Viện dẫn ở gốc, nó đi qua cây từ trên xuống dưới, thu thập các nút trong "acc". "acc" phải được trả về trong mỗi lá ...
is_leaf() là đúng nếu self.children trống.
Tôi luôn tự hỏi - có lệnh "thu hút tất cả" nhanh hay ngắn nhất là vòng lặp 'for' bạn đã viết? – Owen
@Own nope, nhưng tôi thấy nó OK như thế này, nó chỉ là hai dòng đơn giản ... –
Trong Python 3.3 sẽ có câu lệnh 'yield from' sẽ tự động tạo ra các mục từ một trình tạo khác, vì vậy bất kỳ vòng lặp' for' nào với một 'yield' trong đó bạn có thể viết dưới dạng một biểu thức máy phát có thể được tạo thành một dòng. – agf