我很抱歉这个问题太简单了。你知道吗
目的:这是我的软件程序输出:
1 590 SC 1.000 LEU2_YEAST 100%
1 590 EC 1.000 LEU2_ECOLI 100%
2 467 SC 1.000 FADH_YEAST 100%
2 467 EC 1.000 ADH3_ECOLI 100%
3 463 SC 1.000 6PG1_YEAST 100%
3 463 SC 0.816 6PG2_YEAST
3 463 EC 1.000 6PGD_ECOLI 100%
3 463 EC 0.903 6PG9_ECOLI
4 446 SC 1.000 YME1_YEAST 59%
4 446 EC 1.000 FTSH_ECOLI 100%
5 411 SC 1.000 ADH4_YEAST 100%
5 411 EC 1.000 ADH2_ECOLI 99%
8 256 SC 1.000 ATM1_YEAST 100%
8 256 EC 1.000 HLYB_ECOLI 99%
8 256 EC 0.987 HLY2_ECOLI
9 252 SC 1.000 MDL2_YEAST 100%
9 252 SC 0.203 MDL1_YEAST
9 252 EC 1.000 MSBA_ECOLI 99%
对于那些有生物学背景的人,我只想找出最好的答案。对于那些具有非生物学背景的人,我想提取成对的基因,前提是第一列中的数字只出现两次。你知道吗
例如,我们可以看到数字1在文件的第一列中出现两次:
1 590 SC 1.000 LEU2_YEAST 100%
1 590 EC 1.000 LEU2_ECOLI 100%
但数字3出现4次,出现在文件的第一列:
3 463 SC 1.000 6PG1_YEAST 100%
3 463 SC 0.816 6PG2_YEAST
3 463 EC 1.000 6PGD_ECOLI 100%
3 463 EC 0.903 6PG9_ECOLI
因此,对于这个示例文件,输出如下所示:
LEU2_YEAST LEU2_ECOLI
FADH_YEAST ADH3_ECOLI
YME1_YEAST FTSH_ECOLI
ADH4_YEAST ADH2_ECOLI
因为这是文件中仅有的四对行。你知道吗
这是我的密码:
import sys
Dict1 = {}
for line in open(sys.argv[1]):
line = line.strip().split()
if line[0] not in Dict1.keys():
Dict1[line[0]] = [line[4]]
elif line[0] in Dict1.keys():
Dict1[line[0]].append(line[4])
for i in Dict1.values():
if len(i) == 2:
print i[0] + "\t" + i[1]
这样,它打印的输出是:
LEU2_YEAST LEU2_ECOLI
FADH_YEAST ADH3_ECOLI
ADH4_YEAST ADH2_ECOLI
YME1_YEAST FTSH_ECOLI
我只是好奇别人会怎么做?实际上,我的实际数据集将有数千行,所以我想知道是否有更有效的方法(无论是在时间还是内存方面)来实现这一点?或者人们会如何加上“支票”来确保数字只出现两次?在这个阶段,我已经掌握了python的基础知识,所以我正在寻找更好地设计代码的方法。你知道吗
一个可能的改进是将
if line[0] not in Dict1.keys()
改为if line[0] not in Dict1
,因为not in Dict1.keys()
是一个O(n)操作,而not in Dict
是关于O(1)。你知道吗我不确定真正的业绩增长。你应该用time来解决这个问题。你知道吗
如果文件按第一行中的数字排序,则可以使用^{} :
相关问题 更多 >
编程相关推荐