zoukankan      html  css  js  c++  java
  • 使用Arraylist将数组中元素随机均等乱序分为N个子数组

    使用Arraylist将数组中元素随机均等乱序分为N个子数组

    觉得有用的话,欢迎一起讨论相互学习~

    我的微博我的github我的B站

    • 为了将数组中的元素 随机地均等地, 不重复地 ,划分到N个子数组中
    • 使用Arraylist将数组中的元素保存到ArrayList中,使用Collections.shuffle(ArrayList)对列表中的元素进行乱序处理
    • 遍历元素,将指定个数的元素重新装载到list列表或数组中

    示例

    生成GC含量为50%的DNA序列

    • 说明:GC含量反映一条DNA链的GC碱基占所有碱基的比例(其中DNA碱基由ACGT四种碱基构成)。
    • 作法:
      • 生成一条长度为bit的整型数组DNAindex,用以表示碱基索引。
      • 将DNAindex数组中元素存储到Arraylist-listDNAindex中,使用 Collections.shuffle(listDNAindex)对其中元素进行乱序处理
      • 将listDNAindex中元素分成两部分,前段部分存入A_T_list中-用以表示A_T碱基的索引,后段部分存入G_C_list中-用以表示G_C碱基的索引。
      • 从 A_T = {'A', 'T'}和G_C = {'G', 'C'}中随机选择碱基按照A_T_list和G_C_list中的索引位置装填碱基到dna中。
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import java.util.Random;
    
    public class Mainfunction {
        public static void main(String[] args) {
            CreatePopulation createdna = new CreatePopulation();
            char[] demo_dna = createdna.init();
            String demoresultDNA = String.valueOf(demo_dna);
            System.out.println("demoresultDNA  :" + demoresultDNA);
            System.out.println("A_T_index");
            for (int j = 0; j < createdna.bit / 2; j++) {
                System.out.print(createdna.A_T_list.get(j) + " ");
            }
            System.out.println(" ");
            System.out.println("G_C_index");
            for (int j = 0; j < createdna.bit / 2; j++) {
                System.out.print(createdna.G_C_list.get(j) + " ");
            }
        }
    }
    
    class CreatePopulation {
        int bit = 20;
        int Num = 4;
        //将DNAindex由数组模式转换为List列表模式表示为listDNAindex
        List<Integer> listDNAindex = new ArrayList<Integer>();
        //对于AT和GC分别用两个列表表示其位置的索引
        List<Integer> A_T_list = new ArrayList<Integer>();
        List<Integer> G_C_list = new ArrayList<Integer>();
    
        char[] init() {
            char[] A_T = {'A', 'T'};
            char[] G_C = {'G', 'C'};
            char[] dna = new char[bit];
            int[] DNAindex = new int[bit];
            for (int i = 0; i < bit; i++) {
                DNAindex[i] = i;
            }//初始化DNAindex,其中DNAindex可表示为{0,1,2,3,4,5...19}
            for (Integer i : DNAindex) {
                listDNAindex.add(i);
            }
            //对列表进行乱序处理--转换成列表进行处理主要是为了使用乱序功能和不重复的功能
            Collections.shuffle(listDNAindex);
            int arrayCount = 2;                                       //分的组数
            int arraySumCount = listDNAindex.size() / arrayCount;     //每组数量
            int startIndex = 0;                                       //每组开始下标
    
            for (int i = 0; i < listDNAindex.size(); i++) {
                if (i == arraySumCount) {
                    for (int j = startIndex; j < i; j++) {
                        //将前1/2序列加入到A_T_list中
                        A_T_list.add(listDNAindex.get(j));
                        //java中ArrayList使用和python中list使用方式有些不同,其中元素的获取需要使用.get语句,
                        // 而python中元素的获取可以和数组一样直接使用下标索引
                    }
                }
                //如果到达最终索引
                if (i == listDNAindex.size() - 1) {
                    //将后1/2序列加入到G_C_list中
                    for (int j = arraySumCount; j <= i; j++) {
                        G_C_list.add(listDNAindex.get(j));
                    }
                }
            }
            for (int i = 0; i < A_T_list.size(); i++) {
                int a = (int) (Math.random() * 2);
                dna[A_T_list.get(i)] = A_T[a];
            }
            for (int i = 0; i < G_C_list.size(); i++) {
                int a = (int) (Math.random() * 2);
                dna[G_C_list.get(i)] = G_C[a];
            }
            return dna;
        }
    }
    
    • 输出:
    demoresultDNA  :TATGTTCTACGGGTCCGTAG
    A_T_index
    17 4 2 18 7 0 5 1 13 8  
    G_C_index
    14 12 9 11 10 6 19 16 3 15
    Process finished with exit code 0
    
  • 相关阅读:
    Framework7-Vue搭建项目
    在vue中使用handsontable
    electron-vue中关闭烦人的es语法检查
    今天工作整整一个月了,来记录一下(web前端)
    在electron-vue项目中使用element-ui
    使用electron-vue搭建桌面应用程序项目
    Electron是个啥?
    2月11日-寒假进度11
    2月10日-寒假进度10
    2月9日-寒假进度09
  • 原文地址:https://www.cnblogs.com/cloud-ken/p/10241441.html
Copyright © 2011-2022 走看看