免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3098 | 回复: 13
打印 上一主题 下一主题

大侠帮忙改改代码啦 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-02 15:40 |只看该作者 |倒序浏览
小弟才学perl不久,下面这个代码是实现每个字符在每个位置上出现的次数,主要用在生物信息中的氨基酸频率统计
用hash完成的,写完后,发现跟我在C#里写的思路完全一样,貌似没有找到perl的感觉啊,所以请大虾帮忙看看,怎么写能更好呢?谢谢啦~
  1. use strict;
  2. use warnings;

  3. my @testSet = ("ACDE","ADEF","DEFG","EFGH");
  4. my %hashTable ;
  5. foreach my $seq(@testSet){
  6.         for(my $i=0;$i<length($seq);$i++){
  7.                 my $aminoAcid= substr($seq,$i,1);
  8.                 my $tempKey=$aminoAcid."$i";
  9.                 if(exists $hashTable{$tempKey}){
  10.                         $hashTable{$tempKey} +=1;
  11.                 }
  12.                 else{
  13.                 $hashTable{$tempKey}= 1;
  14.                 }
  15.         }
  16. }
  17. while ((my $key,my $value) = each %hashTable) {
  18.         print "$key=$value\n";
  19. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2010-12-02 16:22 |只看该作者
本帖最后由 小鹭 于 2010-12-02 17:12 编辑

perl -ne 'chomp; @str=split(//); for ($i=0; $i<scalar(@str); $i++) {$rec{$str[$i].$i}++} END{foreach (keys %rec) {print "$_ $rec{$_}\n"}}' bio.txt


E0 1
D2 1
G3 1
E1 1
D1 1
C1 1
D0 1
G2 1
E2 1
F2 1
F3 1
A0 2
F1 1
H3 1
E3 1

感觉还不是很利索,还有修改的余地。

论坛徽章:
0
3 [报告]
发表于 2010-12-02 16:22 |只看该作者
  1. #!/usr/bin/perl
  2. @testSet = ("ACDE","ADEF","DEFG","EFGH");
  3. @tem=split //,(join '',@testSet );
  4. for(@tem)
  5. {
  6.   $hash{$_}++;
  7. }
  8. print map {"$_ => $hash{$_}\n"} sort keys %hash;
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2010-12-02 16:26 |只看该作者
初学,试着写了个,感觉那个$i比较多余,能用$.吗?
  1. @test_set = qw/ACDE ADEF DEFG EFGH/;
  2. for (@test_set){
  3.   @c = split //;
  4.   $i = 0;
  5.   for $x (@c){
  6.     $hash{$x.$i}++;
  7.     $i++;
  8.   }
  9. }
  10. for $key (keys %hash){
  11.   print "$key=$hash{$key}\n";
  12. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2010-12-02 16:48 |只看该作者
回复 4# 昭襄王

$.用在文件句柄里····不要唔会了··

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2010-12-02 16:51 |只看该作者
回复  昭襄王

$.用在文件句柄里····不要唔会了··
wfnh 发表于 2010-12-02 16:48



    哦,明白了,多谢!

论坛徽章:
0
7 [报告]
发表于 2010-12-02 16:56 |只看该作者

  1. my @testSet = ("ACDE","ADEF","DEFG","EFGH");
  2. my %hash;
  3. map{$_ => $hash{$_}++} map{split ''} @testSet;
  4. print "$_ => $hash{$_}\n" for (sort keys %hash);

复制代码

论坛徽章:
0
8 [报告]
发表于 2010-12-02 17:00 |只看该作者
谢谢大家的回复
晚上吃完饭研究一下

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2010-12-02 17:02 |只看该作者
回复 7# wfnh


    审题不认真,不单纯是统计字母
统计字母在不同字符串中的同一位置
./pl025
E0=1
D2=1
G3=1
E1=1
D1=1
C1=1
D0=1
G2=1
E2=1
F2=1
F3=1
A0=2
F1=1
H3=1
E3=1

论坛徽章:
0
10 [报告]
发表于 2010-12-02 17:03 |只看该作者
回复 9# 昭襄王

的确···
我改一下··
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP