gpt4 book ai didi

loops - 重叠脚本: how to solve?

转载 作者:行者123 更新时间:2023-12-02 18:41:04 26 4
gpt4 key购买 nike

我编写了一个简单的代码来匹配和选择/丢弃两个文件中的元素。此代码适用于包含 Id 对的 $file_in:

Id1 Id2
Id1 Id3
Id1 Id4
Id3 Id4
Id3 Id5
Id3 Id6
Id4 Id5
Id4 Id6

以及包含 Id 列表的 $file_list:

Id1
Id2
Id4
Id6
Id7
Id8

我想要的是获得一个输出,其中仅报告来自 $file_in 的对,这两个 Id 都包含在 $file_list 中。因此,我想要的输出如下:

Id1 Id2
Id1 Id4
Id4 Id6

我使用的代码在 $file_in 上循环并给出以下输出:

 Id1 Id2
Id1 Id2
Id1 Id4
Id1 Id2
Id1 Id4
Id4 Id6
Id1 Id2
Id1 Id4
Id4 Id6
Id1 Id2
Id1 Id4
Id4 Id6

代码如下:

use List::MoreUtils qw(any);

$file_in = "gold_standards.txt";
$file_list = "list.txt";

open (HAN, "< $file_in") || die "Impossible open the in-file...";

my @r = <HAN>;
close (HAN);

open (PEW, "< $file_list") || die "Impossible open list_file...";
@l = <PEW>;
close (PEW);

for ($p=0; $p<=$#l; $p++){
chomp ($l[$p]);

for ($i=0; $i<=$#r; $i++){
chomp ($r[$i]);
@v = split (/\t/, $r[$i],2);
$id_protein1 = $v[0];
$id_protein2 = $v[1];


if ((any {$id_protein1 eq $_} @l) && (any {$id_protein2 eq $_} @l)) {
print "$r[$i]\n";
}
}
}

我确信这是一个基本问题,但目前我无法解决它。如有任何帮助,我们将不胜感激。

最佳答案

一旦成功,您可以通过切换循环嵌套并跳出内循环来防止多次复制:

#!/usr/bin/perl
use strict;
use warnings;
use List::Util qw(any);

$file_in = "gold_standards.txt";
$file_list = "list.txt";


open (HAN, "< $file_in") or die "Impossible open the in-file...";
my @r = <HAN>;
close (HAN);

open (PEW, "< $file_list") or die "Impossible open list_file...";
my @l = <PEW>;
close (PEW);

chomp (@l, @r);

for my $rv (@r) {
my ($id_protein1, $id_protein2) = split(/\t/, $rv, 2);

for my $lv (@l) {
if ((any {$id_protein1 eq $_} @l) && (any {$id_protein2 eq $_} @l)) {
print "$rv\n";
last;
}
}
}

根据 @steveo314 的答案,您还可以在其中构建哈希和查找:

# ...

my %lh = map { $_ => 1} @l;

for my $rv (@r) {
my ($id_protein1, $id_protein2) = split(/\t/, $rv, 2);
print "$rv\n" if (exists $lh{$id_protein1} && exists $lh{$id_protein2});
}

关于loops - 重叠脚本: how to solve?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68005293/

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