2016-10-20 17 views
0

Pythonでは、リストが変更されないときにwhileループを終了する良い方法はありますか?リストが変更されないときにwhileループを終了する

私は、データポイントのグループの重心を見つけることを含むk平均アルゴリズムを実装しようとしています。重心位置がもはや変化しなくなると、ループは終了する。

私は、ループの始めに重心のリストを保存して、前回の重心が現在のものと一致するまでwhileループを続けることができます。しかし、これを行うもっとpythonicの方法はありますか?

+0

[Pythonでwhileループ終了](http://stackoverflow.com/questions/16656313/exit-while-loop-in-python)の可能性の重複 –

+0

http://stackoverflow.com/questions/ 16656313/exit-while-loop-in-python –

+0

"Exit while loop in Python"の答えをどのように解釈するのか分かりませんが、変更リストについて話しているようではありません – Vermillion

答えて

1

このソリューションは、リストの2つのコピーが保持されているため、スペースの複雑さの点で最適ではありません。しかしこれにより、リストが変更されたかどうかを確認することができます。

from copy import deepcopy 


class CList(list): 
    def __init__(self, *args, **kwargs): 
     super(CList, self).__init__(*args, **kwargs) 
     self.reset_state() 

    def reset_state(self): 
     self_copy = deepcopy(self) 
     self.last_state = self_copy 

    @property 
    def has_changed(self): 
     return self.last_state != self 

>>> l = CList([1, 2, 3]) 
>>> l.has_changed 
False 
>>> l.append(4) 
>>> l 
[1, 2, 3, 4] 
>>> l.has_changed 
True 
>>> l.reset_state() 
>>> l.has_changed 
False 
関連する問題