美文网首页
多集合笛卡尔积

多集合笛卡尔积

作者: 王哈哈就很棒 | 来源:发表于2019-12-23 12:25 被阅读0次

Python

def test2(list1, list2):
    res = []
    for item1 in list1:
        for item2 in list2:
            res.append( item1 + ' ' + item2 )
    return res


def test(data_list):
    list1 = data_list[0]

    for tmp_list in data_list[1:]:
        res = test2(list1, tmp_list)
        list1 = res

    print(list1)

a = ['a', 'b', 'c']
b = ['d', 'e', 'f']
c = ['g', 'h']

test([a, b, c])

Out

['a d g', 'a d h', 'a e g', 'a e h', 'a f g', 'a f h', 'b d g', 'b d h', 'b e g', 'b e h', 'b f g', 'b f h', 'c d g', 'c d h', 'c e g', 'c e h', 'c f g', 'c f h']

Golang

package main

import "fmt"

func main() {
    a := []string{"a", "b", "c"}
    b := []string{"d", "e", "f"}
    c := []string{"m", "n"}

    test1([][]string{a, b, c})
}

func test1(datalist [][]string){
    list1 := datalist[0]
    for _, item_list := range datalist[1:]{
        result := test2(list1, item_list)
        list1 = result
    }

    // 打印
    for index, val := range list1{
        fmt.Println(index, val)
    }
}

func test2(list1 []string, list2 []string) []string {
    var res []string

    for _, item1 := range list1{
        for _, item2 := range list2{
            res = append(res, item1 + " " + item2)
        }
    }
    return res
}

Out

0 a d m
1 a d n
2 a e m
3 a e n
4 a f m
5 a f n
6 b d m
7 b d n
8 b e m
9 b e n
10 b f m
11 b f n
12 c d m
13 c d n
14 c e m
15 c e n
16 c f m
17 c f n

PHP

<?php
$a = array('a', 'b', 'c');
$b = array('d', 'e', 'f');
$c = array('m', 'n');
print_r(combineDika($a,$b,$c));

/**
 * 所有数组的笛卡尔积
 * 
 * @param unknown_type $data
 */
function combineDika() {
    $data = func_get_args();
    $cnt = count($data);
    $result = array();

    foreach($data[0] as $item) {
        $result[] = array($item);
    }

    for($i = 1; $i < $cnt; $i++) {
        $result = combineArray($result,$data[$i]);
    }

    return $result;
}



/**
 * 两个数组的笛卡尔积
 * 
 * @param unknown_type $arr1
 * @param unknown_type $arr2
 */
function combineArray($arr1,$arr2) {
    $result = array();

    foreach ($arr1 as $item1) {
        foreach ($arr2 as $item2) {
            $temp = $item1;
            $temp[] = $item2;
            $result[] = $temp;
        }

    }

    return $result;

}

相关文章

  • 多集合笛卡尔积

    Python Out Golang Out PHP

  • 连接查询

    笛卡尔积 有两个集合A和B,笛卡尔积表示A集合中的元素和B集合中的元素任意相互关联产生的所有可能的结果 Sql中笛...

  • 三、MySQL多表查询和子查询

    1、隐式连接 1、笛卡尔乘积笛卡尔(Descartes)乘积又叫直积。假设集合A={a,b},集合B={0,1,2...

  • 笛卡尔积

    1.什么笛卡尔积 百科:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又...

  • 笛卡尔积算法(PHP实现)

    第一、定义 笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积(Cartesian product),又称直积,表示...

  • oracle多表查询之经典面试题

    一、笛卡尔积 概念 笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直...

  • 集合的笛卡尔积

    两个变量关键prefix和index,作为递归方法的参数时进行变化prefix + input[index][i]...

  • 笛卡尔积

    笛卡尔乘积:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积表示为...

  • 关系数据库

    关系数据结构及形式化定义 关系 域具有相同类型的值得集合 笛卡尔积域上的一种集合运算 关系多个域的笛卡尔积的子集叫...

  • Oracle入门笔记【3】多表查询与分组统计查询

    1,先实现多表查询: (可以发现两个集合发生了乘积,这叫笛卡尔积问题。) 消除笛卡尔积: (这只是消除了显示的笛卡...

网友评论

      本文标题:多集合笛卡尔积

      本文链接:https://www.haomeiwen.com/subject/mwsznctx.html