【发布时间】:2019-07-18 08:49:55
【问题描述】:
我查看了文档,并且知道如何在数组中搜索字符串、打印字符串的位置等。但我的问题是我的字符串每次迭代都会发生变化。我的目标是在数组的第一行中搜索字符串,保存其位置,然后在数组的第一列中搜索不同的字符串,并保存该位置(给我一行,数组中的列位置)。这是我要执行的“想法”的代码:
use strict;
use warnings;
my $subseq1 = 'MNIDDKL';
my $subseq2 = 'GLFLKCGGIDEMQSS';
my $line;
my @array;
my @arr;
while($line = <MATFILE>) #Load the array
{
$line =~ /^$/ and die "Blank line detected at $.\n";
$line =~ /^#/ and next;
push @array, $line; #adds each line to the array
};
close MATFILE;
#Join then split
my $joined = join('', @array);
my @rep = $joined =~/./g;
@rep = split(' ', $joined);
#Need to split into row, column format:
while (@rep)
{
push (@arr, [splice(@rep, 0, 24)]);
}
my ($len1, $len2) = map length, $subseq1, $subseq2;
my @subseq1 = $subseq1 =~ /./g;
my @subseq2 = $subseq2 =~ /./g;
for my $x (0..$len2) #Number of rows
{
for my $y (0..$len1) #Number of columns
{
if ($subseq1[$y] == $arr[0][$_]) #Does not work
{
my $subcol = $_; #column from the sub matrix
}
if ($subseq2[$x] == $arr[$_][0]) #Does not work
{
my $subrow = $_; #row from pam matrix
}
}
}
我知道我可以使用 List::MoreUtils 'first_index' 来查找我的字符串的第一个位置,但我不确定如何在我的字符串更改时执行此操作。
总的来说,我正在寻找每个字符串中的字符(例如'A'和'R'),在数组的第一行中找到一个,在数组的第一列中找到另一个,然后关联它的位置。感谢您提供任何和所有帮助!
这是我要访问的矩阵:
#
# PAM 250 substitution matrix, scale = ln(2)/3 = 0.231049
#
# Expected score = -0.844, Entropy = 0.354 bits
#
# Lowest score = -8, Highest score = 17
#
A R N D C Q E G H I L K M F P S T W Y V B Z X *
A 2 -2 0 0 -2 0 0 1 -1 -1 -2 -1 -1 -3 1 1 1 -6 -3 0 0 0 0 -8
R -2 6 0 -1 -4 1 -1 -3 2 -2 -3 3 0 -4 0 0 -1 2 -4 -2 -1 0 -1 -8
N 0 0 2 2 -4 1 1 0 2 -2 -3 1 -2 -3 0 1 0 -4 -2 -2 2 1 0 -8
D 0 -1 2 4 -5 2 3 1 1 -2 -4 0 -3 -6 -1 0 0 -7 -4 -2 3 3 -1 -8
C -2 -4 -4 -5 12 -5 -5 -3 -3 -2 -6 -5 -5 -4 -3 0 -2 -8 0 -2 -4 -5 -3 -8
Q 0 1 1 2 -5 4 2 -1 3 -2 -2 1 -1 -5 0 -1 -1 -5 -4 -2 1 3 -1 -8
E 0 -1 1 3 -5 2 4 0 1 -2 -3 0 -2 -5 -1 0 0 -7 -4 -2 3 3 -1 -8
G 1 -3 0 1 -3 -1 0 5 -2 -3 -4 -2 -3 -5 0 1 0 -7 -5 -1 0 0 -1 -8
H -1 2 2 1 -3 3 1 -2 6 -2 -2 0 -2 -2 0 -1 -1 -3 0 -2 1 2 -1 -8
I -1 -2 -2 -2 -2 -2 -2 -3 -2 5 2 -2 2 1 -2 -1 0 -5 -1 4 -2 -2 -1 -8
L -2 -3 -3 -4 -6 -2 -3 -4 -2 2 6 -3 4 2 -3 -3 -2 -2 -1 2 -3 -3 -1 -8
K -1 3 1 0 -5 1 0 -2 0 -2 -3 5 0 -5 -1 0 0 -3 -4 -2 1 0 -1 -8
M -1 0 -2 -3 -5 -1 -2 -3 -2 2 4 0 6 0 -2 -2 -1 -4 -2 2 -2 -2 -1 -8
F -3 -4 -3 -6 -4 -5 -5 -5 -2 1 2 -5 0 9 -5 -3 -3 0 7 -1 -4 -5 -2 -8
P 1 0 0 -1 -3 0 -1 0 0 -2 -3 -1 -2 -5 6 1 0 -6 -5 -1 -1 0 -1 -8
S 1 0 1 0 0 -1 0 1 -1 -1 -3 0 -2 -3 1 2 1 -2 -3 -1 0 0 0 -8
T 1 -1 0 0 -2 -1 0 0 -1 0 -2 0 -1 -3 0 1 3 -5 -3 0 0 -1 0 -8
W -6 2 -4 -7 -8 -5 -7 -7 -3 -5 -2 -3 -4 0 -6 -2 -5 17 0 -6 -5 -6 -4 -8
Y -3 -4 -2 -4 0 -4 -4 -5 0 -1 -1 -4 -2 7 -5 -3 -3 0 10 -2 -3 -4 -2 -8
V 0 -2 -2 -2 -2 -2 -2 -1 -2 4 2 -2 2 -1 -1 -1 0 -6 -2 4 -2 -2 -1 -8
B 0 -1 2 3 -4 1 3 0 1 -2 -3 1 -2 -4 -1 0 0 -5 -3 -2 3 2 -1 -8
Z 0 0 1 3 -5 3 3 0 2 -2 -3 0 -2 -5 0 0 -1 -6 -4 -2 2 3 -1 -8
X 0 -1 0 -1 -3 -1 -1 -1 -1 -1 -1 -1 -1 -2 -1 0 0 -4 -2 -1 -1 -1 -1 -8
* -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 -8 1
我将访问这些值并使用它们来计算序列相似度的分数。
【问题讨论】:
-
你能展示一些数据,并指出你需要哪些部分吗?
-
那么,对于 {A,R},你想要 -2?
-
这是正确的@ikegami
-
HoH 比 AoA 更有意义。事实上,我会使用一个由 2 个字母字符串作为键的简单哈希。
-
==用于比较数字。您希望eq比较字符串。use warnings;会告诉你的。
标签: arrays string perl search hashtable