Split a list into two sublists in all possible ways

前端 未结 4 984
情深已故
情深已故 2020-12-08 22:42

I have a list of variable size, for example

[1, 2, 3, 4]

and I want to get every possible way to split this list into two:

         


        
4条回答
  •  臣服心动
    2020-12-08 23:11

    l = [1, 2, 3, 4]
    flags = [False] * len(l)
    while True:
        a = [l[i] for i, flag in enumerate(flags) if flag]
        b = [l[i] for i, flag in enumerate(flags) if not flag]
        print a, b
        for i in xrange(len(l)):
            flags[i] = not flags[i]
            if flags[i]:
                break
        else:
            break
    

    Result:

    [] [1, 2, 3, 4]
    [1] [2, 3, 4]
    [2] [1, 3, 4]
    [1, 2] [3, 4]
    [3] [1, 2, 4]
    [1, 3] [2, 4]
    [2, 3] [1, 4]
    [1, 2, 3] [4]
    [4] [1, 2, 3]
    [1, 4] [2, 3]
    [2, 4] [1, 3]
    [1, 2, 4] [3]
    [3, 4] [1, 2]
    [1, 3, 4] [2]
    [2, 3, 4] [1]
    [1, 2, 3, 4] []
    

    It can easily be adapted to java:

    public static void main(String[] args) {
        int[] l = new int[] { 1, 2, 3, 4 };
        boolean[] flags = new boolean[l.length];
        for (int i = 0; i != l.length;) {
            ArrayList a = new ArrayList<>(), b = new ArrayList<>();
            for (int j = 0; j < l.length; j++)
                if (flags[j]) a.add(l[j]); else b.add(l[j]);
            System.out.println("" + a + ", " + b);
            for (i = 0; i < l.length && !(flags[i] = !flags[i]); i++);
        }
    }
    

提交回复
热议问题