【发布时间】:2017-02-19 18:22:24
【问题描述】:
我有一个列表:
sample = [['TTTT', 'CCCZ'], ['ATTA', 'CZZC']]
count = [[4,3],[4,2]]
correctionfactor = [[1.33, 1.5],[1.33,2]]
我计算每个字符 (pi) 的频率,将其平方,然后求和(然后我计算 het = 1 - sum)。
The desired output [[1,2],[1,2]] #NOTE: This is NOT the real values of expected output. I just need the real values to be in this format.
问题:我不知道如何在此循环中传递列表列表(样本,计数)来提取所需的值。我之前使用此代码仅传递了一个列表(例如['TACT','TTTT'..])。
- 我怀疑我需要添加一个更大的 for 循环,该循环对样本中的每个元素进行索引(即索引超过
sample[0] = ['TTTT', 'CCCZ']和sample[1] = ['ATTA', 'CZZC']。我不知道如何将其合并到代码中。
** 代码
list_of_hets = []
for idx, element in enumerate(sample):
count_dict = {}
square_dict = {}
for base in list(element):
if base in count_dict:
count_dict[base] += 1
else:
count_dict[base] = 1
for allele in count_dict: #Calculate frequency of every character
square_freq = (count_dict[allele] / count[idx])**2 #Square the frequencies
square_dict[allele] = square_freq
pf = 0.0
for i in square_dict:
pf += square_dict[i] # pf --> pi^2 + pj^2...pn^2 #Sum the frequencies
het = 1-pf
list_of_hets.append(het)
print list_of_hets
"Failed" OUTPUT:
line 70, in <module>
square_freq = (count_dict[allele] / count[idx])**2
TypeError: unsupported operand type(s) for /: 'int' and 'list'er
【问题讨论】:
-
错误消息告诉你确切地出了什么问题。:
square_freq = (count_dict[allele] / counts[idx])**2正在提高TypeError: unsupported operand type(s) for /: 'int' and 'list'。您不能将int除以list。顺便说一句,这与您编写的代码不匹配,当您尝试将counts[idx]传递给float时,这可能会引发另一个TypeError。 -
我正在尝试使用像
square_freq = [[n/d for n, d in zip(subq, subr)] for subq, subr in zip(count_dict[allele], counts)]这样的 zip 命令。但我仍然有错误。还有其他建议吗? -
@PM2Ring 我已经更正了。谢谢指出
-
什么是subq、subr???
-
另外,我已经编辑了问题以突出真正的问题(我在进行故障排除时意识到)
标签: python list for-loop division