如何处理Python中的迭代



我有这样的代码:

def PCP(seq, feature):
l = []
mean = st.mean(list(feature.values()))
std = np.std(list(feature.values()))
for elem in seq:
for aa in elem:
if aa in feature:
l.append((feature[aa]-mean)/std)
else:
l.append(0)
return l

seq为带序列的字符串列表,feature为以氨基酸为键,以某些值为值的字典。我希望该函数能遍历列表(seq)中字符串中的每个aa,并取dict中对应的值并进行计算。

这是我把seqfeature的数据:

['KISKDLSIAVQMMKRIHSLLERYPEIL', 'SGRVEKSPHEQEIKFFAKILLPLINQY', 'IDQLIVFGEQLIQKSEPLDAVLIEDEL', ..], pI= {"K":9.47, "P":6.3, "R":10.76, "T":5.6, "A":6.11, "C":5.02, "D":2.98, "E":3.08, "F":5.91, "G":6.06, "H":7.64......}

也许它们有问题。

当我运行这个函数时,我得到这个错误:

Traceback (most recent call last)
<ipython-input-13-89a7be7ecda7> in <module>
----> 1 test_hydrofobowosc= PCP(test_data_neg, hydrofobowosc)
<ipython-input-12-2f318f9cb908> in PCP(seq, feature)
14   mean = st.mean(list(feature.values()))
15   std = np.std(list(feature.values()))
---> 16   for elem in seq:
17       for aa in elem:
18           if aa in feature:
TypeError: 'NoneType' object is not iterable

怎么了?

'range'返回一个数字列表。

因此'elem'是一个数字。

是不可迭代的。

你的意思是"for element in seq"吗?

下面是修改后的代码:

def PCP(seq, feature):
l = []
mean = st.mean(list(feature.values()))
std = np.std(list(feature.values()))
for elem in seq:
for aa in elem:
if aa in feature:
l.append((feature[aa]-mean)/std)
else:
l.append(0)
return l

我做的主要改变是:

  • 不使用"range(len(seq))"为了遍历序列列表,我使用了"seq"直接。这样,"元素"将是列表中的实际字符串,而不是字符串的索引。
  • 在嵌套循环中,我使用了"作为遍历字符串中的字符的变量。
  • 当检查当前字符是否"在"时在特征字典中,我使用了in关键字而不是"keys[s]"。这是因为"keys()"是一个返回字典键的类列表对象的方法,您需要使用"[]"访问列表中的项。自"aa"是一个字符串而不是索引,你可以直接检查它是否在字典中。
  • 我移动了"返回l"语句,这样它只在所有计算完成后发生一次。

经过这些修改后,代码应该可以像预期的那样工作,并将计算值附加到序列中每个氨基酸的l列表中,这些氨基酸在特征字典中具有相应的值。

最新更新