次のように Atom オブジェクトを作成しました。
class Atom(object):
def __init__(self, symbol, x, y, z)
self.symbol = symbol
self.position = (x, y, z)
いくつかの基準によって選択されたアトムを含むSelection
クラス:
class Selection(object):
def __init__(self, a_system, atom_list=[]):
for atom in a_system:
atom_list.append(atom)
self.atom_list = atom_list
def by_symbol(self, symbol):
r_list = []
for atom in self.atom_list:
if atom.symbol is symbol:
r_list.append(atom)
self.atom_list = r_list
def by_zrange(self, zmin, zmax):
r_list = []
for atom in self.atom_list:
pos = atom.position[2]
if pos > zmin and pos < zmax:
r_list.append(atom)
self.atom_list = r_list
ご覧のとおり、たとえば次のように言えます。
# my_system is a list of atoms objects
group = Selection(my_system)
そして次のように言います。
group.by_symbol('H')
group
そして、すべての水素原子を対象にします。次に、私がする場合:
group.by_zrange(1, 2)
group
そして、 z 座標が 1 から 2 の間のすべての水素原子をオブジェクトに含めます。
私は他の選択基準を持っていますが、一般的にそれらはすべて同じ構造を持っています。
r_list = []
for atom in self.atom_list:
# Some criteria here
r_list.append(atom)
self.atom_list = r_list
質問は次のとおりです。選択基準ごとに上記の構造を書くことを避けるためにできることはありますか?
私の目的を達成するためのより簡単な方法があることを知っていれば、それを聞いてうれしいです.