itertools.combinations
是 Python 标准库 itertools
模块中的一个函数,用于生成输入可迭代对象的所有可能组合。然而,在 JavaScript 中并没有直接对应的 itertools.combinations
函数,但可以通过自定义函数来实现类似的功能。
function* combinations(arr, n) {
if (n === 0) {
yield [];
} else {
for (let i = 0; i <= arr.length - n; i++) {
const head = arr.slice(i, i + 1);
for (const tail of combinations(arr.slice(i + 1), n - 1)) {
yield head.concat(tail);
}
}
}
}
// 使用示例
const arr = [1, 2, 3, 4];
const n = 2;
for (const combo of combinations(arr, n)) {
console.log(combo);
}
原因:组合生成算法可能基于不同的逻辑实现,导致顺序不一致。
解决方法:可以通过对生成的组合进行排序来解决。
function* combinations(arr, n) {
if (n === 0) {
yield [];
} else {
for (let i = 0; i <= arr.length - n; i++) {
const head = arr.slice(i, i + 1);
for (const tail of combinations(arr.slice(i + 1), n - 1)) {
yield head.concat(tail);
}
}
}
}
// 使用示例并排序
const arr = [1, 2, 3, 4];
const n = 2;
const sortedCombos = [];
for (const combo of combinations(arr, n)) {
sortedCombos.push(combo);
}
sortedCombos.sort((a, b) => {
for (let i = 0; i < a.length; i++) {
if (a[i] !== b[i]) return a[i] - b[i];
}
return 0;
});
console.log(sortedCombos);
通过这种方式,可以确保生成的组合按照特定的顺序排列。
领取专属 10元无门槛券
手把手带您无忧上云