【发布时间】:2015-09-14 21:12:49
【问题描述】:
背景:我有一个冗长的脚本,它计算给定质量的可能化学式(基于许多标准),并输出(除其他外)一个代码,该代码对应于该公式所属的化合物的“类别”至。我从一批质量中计算公式,这些质量都应该是同一类的成员。然而,给定仪器等限制,可以为每个质量计算几个可能的公式。我需要检查计算出的任何类是否对所有峰值都是通用的,如果是,则返回匹配/等的位置。
我正在努力研究如何进行迭代 if/for 循环来检查每个组合是否匹配(以有效的方式)。
如您所见,我有一个名为“公式”的列表,其中包含可变数量的元素(在本例中为 12)。
公式中的每个元素都是一个列表,同样具有可变数量的元素。
这些列表中的每个元素都是一个列表,包含 15 7 个元素。 我希望比较不同元素中的第 11 个元素。
即
formulae[0][0][11] == formulae[1][0][11]
formulae[0][0][11] == formulae[1][1][11]
...
formulae[0][1][11] == formulae[11][13][11]
我想答案可能涉及几个嵌套的 for 和 if 语句,但我无法理解它。
然后我需要将匹配的列表(如formulae[0][0])导出到一个新数组。
除非我做错了?
感谢您的帮助!
编辑: 1- 我的数据结构略有变化,我需要检查元素 [?][?][4] 和 [?][?][5] 和 [?][?][6] 和 [?][ ?][7] 都匹配另一个列表中的对应元素。
我已尝试修改一些建议的代码,但无法使其正常工作...
check_O = 4
check_N = 5
check_S = 6
check_Na = 7
# start with base (left-hand) formula
nbase_i = len(formulae)
for base_i in range(len(formulae)): # length of first index
for base_j in range(len(formulae[base_i])): # length of second index
count = 0
# check against comparison (right-hand) formula
for comp_i in range(len(formulae)): # length of first index
for comp_j in range(len(formulae[comp_i])): # length of second index
if base_i != comp_i:
o_test = formulae[base_i][base_j][check_O] == formulae[comp_i][comp_j][check_O]
n_test = formulae[base_i][base_j][check_N] == formulae[comp_i][comp_j][check_N]
s_test = formulae[base_i][base_j][check_S] == formulae[comp_i][comp_j][check_S]
na_test = formulae[base_i][base_j][check_Na] == formulae[comp_i][comp_j][check_Na]
if o_test == n_test == s_test == na_test == True:
count = count +1
else:
count = 0
if count < nbase_i:
print base_i, base_j, comp_i,comp_j
o_test = formulae[base_i][base_j][check_O] == formulae[comp_i][comp_j][check_O]
n_test = formulae[base_i][base_j][check_N] == formulae[comp_i][comp_j][check_N]
s_test = formulae[base_i][base_j][check_S] == formulae[comp_i][comp_j][check_S]
na_test = formulae[base_i][base_j][check_Na] == formulae[comp_i][comp_j][check_Na]
if o_test == n_test == s_test == na_test == True:
count = count +1
else:
count = 0
elif count == nbase_i:
matching = "Got a match! " + "[" +str(base_i) + "][" + str(base_j) + "] matches with " + "[" + str(comp_i) + "][" + str(comp_j) +"]"
print matching
else:
count = 0
【问题讨论】:
-
提供一些有用的输入和你想要的输出比截图更有用
-
您需要什么样的输出形状?
-
感谢帕德莱克的提示。从长远来看,我想获取所有基于条件匹配的 [?][?] 列表并将它们导出到一个新的列表/数组,我们可以认为它是自信地分配的,因为它们都具有相同的杂原子计数.