gpt4 book ai didi

python组合每对行: making script more efficient

转载 作者:行者123 更新时间:2023-12-01 03:55:25 38 4
gpt4 key购买 nike

很抱歉这个问题太基本了。

目标:这是我的软件程序的输出:

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弄清楚这一点。

关于python组合每对行: making script more efficient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37549302/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com