我创建了一个 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
所以问题是:我能做些什么来避免为每个选择标准编写上述结构吗?
如果您知道有一种更简单的方法可以实现我的目的,我会很高兴听到它。