给定2个数组,并且它们有相同的元素数量,构建所有的哈希映射并返回

2024-05-14 14:38:42 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,两个数组:

var names = ['Tom','Jerry','Sam'];
var hobbies = ['Eat','Sleep','Laugh'];

是否有一个函数可以将两个数组构造为如下映射:

{'Tome':'Eat','Jerry':'Sleep','Sam':'Laugh'}
{'Tome':'Sleep','Jerry':'Eat','Sam':'Laugh'}
{'Tome':'Laugh','Jerry':'Eat','Sam':'Laugh'}

还有另外3个。。。 在给定两个数组的情况下,返回的maps数应该是A33=6。 通过javascript或python,任何人都可以做到这一点。 有什么想法吗?你知道吗


在网上搜索之后,这是一个赋值问题,解决这个问题的方法叫做匈牙利法。现在我正在寻找一个匈牙利算法实现的javascript或python。

Tags: 函数namesvarsam情况sleep数组javascript
1条回答
网友
1楼 · 发布于 2024-05-14 14:38:42

要将名称映射到第二个数组的每个可能排列:

from itertools import permutations

hashmaps = [dict(zip(names, perm)) for perm in permutations(hobbies)]

请注意,^{}返回长度为N!的列表,即使长度非常小,也会非常大。你知道吗

网友
2楼 · 发布于 2024-05-14 14:38:42

我从这个链接Permutations in JavaScript?得到了答案。你知道吗

之后,方法可以这样做:

function permute(input) {
var permArr = [],
usedChars = [];
function main(){
    var i, ch;
    for (i = 0; i < input.length; i++) {
        ch = input.splice(i, 1)[0];
        usedChars.push(ch);
        if (input.length == 0) {
            permArr.push(usedChars.slice());
        }
        main();
        input.splice(i, 0, ch);
        usedChars.pop();
    }
    return permArr;
}
return main();

}

function mapFromArrays(source,target){
var targets = permute(target);
var returns = [];

for(var t in targets){
    var map = {};
    for(var i=0;i<source.length;i++){
        map[source[i]] = targets[t][i];
    }
    returns.push(map);
}

return returns;

}

网友
3楼 · 发布于 2024-05-14 14:38:42

这不是排列,而是两个向量的乘积。在Python Itertools中,有一个函数产品可以处理这个问题。你知道吗

import itertools as itls
names = ['Tom','Jerry','Sam']
hobbies = ['Eat','Sleep','Laugh']
print list(itls.product(names, hobbies))

结果是:[('Tom','Eat'),('Tom','Sleep'),('Tom','Laugh'),('Jerry','Eat'),('Jerry','Sleep'),('Jerry','Laugh'),('Sam','Eat'),('Sam','Sleep'),('Sam','Laugh')]

实际上,两个向量的乘积就是对向量1和向量2的每一个进行运算,在这种情况下,运算就是生成一个元组。产品操作相当于:

for i = 0; i<length(vector1); ++i
    for j = 0; j<length(vector2); ++j
        vector1[i] 'op' vector2[j];

相关问题 更多 >

    热门问题