Python—如何将多重赋值更改为JavaScript的语法,并获得给定字符串的正确排列

Python—如何将多重赋值更改为JavaScript的语法,并获得给定字符串的正确排列,javascript,python,math,backtracking,recursive-backtracking,Javascript,Python,Math,Backtracking,Recursive Backtracking,我在搜索回溯时遇到了一点问题。首先,作为一名JavaScript程序员,我在下面链接的代码中发现了一种非常奇怪的语法: a[l], a[i] = a[i], a[l] 使用中的信息,我发现它的意思是:“将a[I]分配给a[l]变量,将a[l]分配给a[I]变量”。我不明白这个有什么用。我想应该是相同的价值观。如果您首先将值赋给a[l],然后尝试获取a[l],那么这两个变量的值都将是a[i] 这是一个Python代码,但是,我想使用相同的原理将其转换为JavaScript # Python p

我在搜索回溯时遇到了一点问题。首先,作为一名JavaScript程序员,我在下面链接的代码中发现了一种非常奇怪的语法:

a[l], a[i] = a[i], a[l]
使用中的信息,我发现它的意思是:“将
a[I]
分配给
a[l]
变量,将
a[l]
分配给
a[I]
变量”。我不明白这个有什么用。我想应该是相同的价值观。如果您首先将值赋给
a[l]
,然后尝试获取
a[l]
,那么这两个变量的值都将是
a[i]


这是一个Python代码,但是,我想使用相同的原理将其转换为JavaScript

# Python program to print all permutations with
# duplicates allowed

def toString(List):
    return ''.join(List)

# Function to print permutations of string
# This function takes three parameters:
# 1. String
# 2. Starting index of the string
# 3. Ending index of the string.
def permute(a, l, r):
    if l==r:
        print toString(a)
    else:
        for i in xrange(l,r+1):
            a[l], a[i] = a[i], a[l]
            permute(a, l+1, r)
            a[l], a[i] = a[i], a[l] # backtrack

# Driver program to test the above function
string = "aab"
n = len(string)
a = list(string)
permute(a, 0, n-1)

# This code is contributed by Bhavya Jain
您可以通过此链接访问IDE:

这段代码的作用是获取字符串“aab”的置换值

例如,使用“aab”作为第一个字符串,我们应该得到以下结果:aab 阿巴 aab 阿巴 咩 baa

我尝试使用“JavaScript”,并得出以下结论:

let arr = [];

let permute = function(str, l, r) {
  if (l === r) {
    arr.push(str);
  } else {
    for (let i = l; i <= r; i++) {
      str[l] = str[i];
      str[i] = str[l];
      permute(str, l + 1, r);
      str[l] = str[i];
      str[i] = str[l];
    }
  }
};

permute('aab', 0, 'aab'.length - 1);

console.log(arr);
让arr=[];
设permute=函数(str,l,r){
如果(l==r){
arr.push(str);
}否则{

对于(设i=l;i以下代码2段代码具有相同的结果,假设值是不可变的

Python语法

a[i], a[j] = a[j], a[i]
x = a[i]
y = a[j]

a[i] = y
a[j] = x
常规语法

a[i], a[j] = a[j], a[i]
x = a[i]
y = a[j]

a[i] = y
a[j] = x
为什么它有效


Python首先计算右侧。有关更多详细信息,请参见

假设值是不可变的,则以下两段代码具有相同的结果

Python语法

a[i], a[j] = a[j], a[i]
x = a[i]
y = a[j]

a[i] = y
a[j] = x
常规语法

a[i], a[j] = a[j], a[i]
x = a[i]
y = a[j]

a[i] = y
a[j] = x
为什么它有效


Python首先计算右侧。有关详细信息,请参见

最后,我解决了所有问题。最重要的部分是使用
split()
函数将字符串转换为数组

let arr = [], y, x;

let permute = function(str, l, r) {
  if (l === r) {
    arr.push(str.join(''));
  } else {
    for (let i = l; i <= r; i++) {
      [str[l], str[i]] = [str[i], str[l]];
      permute(str, l + 1, r);
      [str[l], str[i]] = [str[i], str[l]];
    }
  }
};

permute('aab'.split(''), 0, 'aab'.length - 1)
console.log(arr);
设arr=[],y,x;
设permute=函数(str,l,r){
如果(l==r){
arr.push(str.join(“”));
}否则{

对于(让i=l;i最后,我解决了所有问题。最重要的部分是使用
split()
函数将字符串转换为数组

let arr = [], y, x;

let permute = function(str, l, r) {
  if (l === r) {
    arr.push(str.join(''));
  } else {
    for (let i = l; i <= r; i++) {
      [str[l], str[i]] = [str[i], str[l]];
      permute(str, l + 1, r);
      [str[l], str[i]] = [str[i], str[l]];
    }
  }
};

permute('aab'.split(''), 0, 'aab'.length - 1)
console.log(arr);
设arr=[],y,x;
设permute=函数(str,l,r){
如果(l==r){
arr.push(str.join(“”));
}否则{

对于(让i=l;i)您引用的第一段代码是python的“交换变量”习惯用法。它的可能重复不是重复,变量交换只是这个问题的第一部分。请阅读全文。您的问题清楚地指出:
“python-如何将多重赋值更改为JavaScript的语法?”
对不起,标题不太清楚。我现在已经编辑过了。您引用的第一段代码是python的“交换变量”习惯用法。可能重复的代码不是重复的,变量交换只是这个问题的第一部分。请阅读全文。您的问题清楚地说明:
“Python-如何将多重赋值更改为JavaScript的语法?”
抱歉,标题不太清楚。我现在已经编辑了它。感谢您的回答,但它仍然不起作用。您是否建议将“Python语法”替换为“常规语法”“不起作用?为了您的利益,更详细的反馈会有所帮助。您能检查JSFIDLE文件或IDE吗?我在您的解决方案前后返回相同的数组。也许我对循环做了一些错误,但我不这么认为。另外,ES6版本的交换变量:
[a,b]=[b,a];
@LukasNaujokaitis,谢谢。我帮不上忙,但也许有javascript专家可以帮忙。谢谢你的回答,但它仍然不起作用。你是在建议用“常规语法”取代“Python语法”吗不起作用?为了您的利益,更详细的反馈会有所帮助。您能检查JSFIDLE文件或IDE吗?我在解决方案前后都返回相同的数组。也许我对循环做了一些错误,但我不这么认为。另外,ES6版本的交换变量:
[a,b]=[b,a];
@LukasNaujokaitis,谢谢。我帮不上忙,但也许有javascript专家可以帮忙。