0
因此,我正在創建一個問題,我要創建一個Python類來生成列表的所有排列,並且正在運行以下問題:在Python類中用__iter__方法實現遞歸函數
- 我可以通過一個簡單的遞歸函數輕鬆完成此任務,但作爲一個類似乎我想使用iter方法。我的方法調用遞歸函數(list_all),這與我的iter幾乎相同,這非常令人不安。如何修改我的遞歸函數以符合iter的最佳實踐?
- 我寫了這段代碼,看到它的工作,我覺得我不明白它!我嘗試在測試用例中逐行跟蹤代碼,但對我來說,看起來像列表中的第一個元素每次都被凍結,並且列表的其餘部分被混洗。相反,輸出以意想不到的順序出現。我沒有理解一些東西!
謝謝!
class permutations():
def __init__(self, ls):
self.list = ls
def __iter__(self):
ls = self.list
length = len(ls)
if length <= 1:
yield ls
else:
for p in self.list_all(ls[1:]):
for x in range(length):
yield p[:x] + ls[0:1] + p[x:]
def list_all(self, ls):
length = len(ls)
if length <= 1:
yield ls
else:
for p in self.list_all(ls[1:]):
for x in range(length):
yield p[:x] + ls[0:1] + p[x:]
如果你的功能效果很好,你爲什麼要它擠進一類?如果關鍵是懶惰地生成排列,只需在函數中使用「yield」。 – uselpa 2014-10-31 07:54:21
我同意這一點。在這個問題中特別指出了這個詞,因此我正在考慮如何讓它成爲一個與__iter__方法接口的可迭代類。 – Joe 2014-10-31 08:11:19