簡體   English   中英

Python中如何處理迭代

[英]How to deal with iteracy in 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是一個以氨基酸為鍵和某些值作為值的字典。 我希望 function 遍歷列表( seq )中字符串中的每個aa並獲取字典中對應的值並進行計算。

這是我作為seq放置的一段數據,以及feature字典:

['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......}

也許他們有問題。

當我運行 function 時出現此錯誤:

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 elem 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”。 這樣,“elem”將是列表中的實際字符串,而不是字符串的索引。
  • 在嵌套循環中,我使用“aa”作為變量來遍歷字符串中的字符。
  • 在檢查當前字符是否“在”特征字典中時,我使用了 in 關鍵字而不是“keys[s]”。 這是因為“keys()”是一種返回字典鍵的類列表 object 的方法,您需要使用“[]”來訪問列表中的項目。 因為“aa”是一個字符串而不是一個索引,你可以直接檢查它是否在字典中。
  • 我將“return l”語句移到了嵌套循環之外,這樣它只在所有計算完成后發生一次。

通過這些更改,代碼應按預期工作,並且 append 計算值到 l 列表中序列中每個氨基酸在特征字典中具有相應值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM