如何通过Python中的for循环传递列表列表?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何通过Python中的for循环传递列表列表?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2325字,纯文字阅读大概需要4分钟。
内容图文
![如何通过Python中的for循环传递列表列表?](/upload/InfoBanner/zyjiaocheng/788/3f3ec3f811d241f0bdcecb6ee40253f3.jpg)
我有一份清单清单:
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.
问题:我不知道如何在这个循环中传递列表列表(sample,count)来提取所需的值.我以前只使用此代码传递了一个列表(例如[‘TACT’,’TTTT’..]).
>我怀疑我需要添加一个更大的for循环,对样本中的每个元素进行索引(即样本上的索引[0] = [‘TTTT’,’CCCZ’]和样本[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
解决方法:
我不完全清楚你想如何处理数据中的’Z’项,但是这段代码在https://eval.in/658468中复制了样本数据的输出
from __future__ import division
bases = set('ACGT')
#sample = [['TTTT', 'CCCZ'], ['ATTA', 'CZZC']]
sample = [['ATTA', 'TTGA'], ['TTCA', 'TTTA']]
list_of_hets = []
for element in sample:
hets = []
for seq in element:
count_dict = {}
for base in seq:
if base in count_dict:
count_dict[base] += 1
else:
count_dict[base] = 1
print count_dict
#Calculate frequency of every character
count = sum(1 for u in seq if u in bases)
pf = sum((base / count) ** 2 for base in count_dict.values())
hets.append(1 - pf)
list_of_hets.append(hets)
print list_of_hets
产量
{'A': 2, 'T': 2}
{'A': 1, 'T': 2, 'G': 1}
{'A': 1, 'C': 1, 'T': 2}
{'A': 1, 'T': 3}
[[0.5, 0.625], [0.625, 0.375]]
通过使用collections.Counter而不是count_dict,可以进一步简化此代码.
顺便说一句,如果不在’ACGT’中的符号总是’Z’,那么我们可以加快计数计算.摆脱bases = set(‘ACGT’)并改变
count = sum(1 for u in seq if u in bases)
至
count = sum(1 for u in seq if u != 'Z')
内容总结
以上是互联网集市为您收集整理的如何通过Python中的for循环传递列表列表?全部内容,希望文章能够帮你解决如何通过Python中的for循环传递列表列表?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。