首页 > 解决方案 > 对于在 python 到 javascript 语言中

问题描述

我在 python 中有这行用于列表理解,但是我不太了解这种语言,我想将它转换为 javascript。

该行是:

next = [ (i,j) for i,j in getValidMoves(grid,x,y,moves) ]
num = [ (len(getValidMoves(grid,x+i,y+j,moves)),i,j) for i,j in next]

getValidMoves 是一个辅助功能,但我认为没有必要了解其余代码

标签: javascriptpythonfunctionfor-looplist-comprehension

解决方案


让我们从 python 中的 for 循环如何工作开始:

与许多语言相比,python 实际上获取包含在您在 foror 循环语句中给出的任何可迭代对象中的每个元素,并且在没有任何增量的情况下迭代该对象。所以在 python 中,下面的代码不是一个无限循环。

for i in range(5):
    i=3
    print(i)
## prints 3, five times

所有这一切都使 for 循环能够遍历一个可迭代对象,如下所示

for i in ['hsusu', 4, ['usjs'], '21']:
    print(i)
## prints each one of the list elements

现在列表推导式中的 for 循环与普通的 for 循环是一样的。然而,列表推导式是一种从可迭代对象创建列表的快速方法,因为它使用了 append 函数的效率。在以下带有普通多行 for 循环的示例中,您使用 append 5 次以创建列表

next = [] # an empty list
for i, j in getValidMoves(grid,x,y,moves): # iterate through the iterable
    next.append((i,j)) # append the desired element

相反,列表推导不调用 append 函数(或者至少没有那么多。我不确定),所以迭代完成得更快。

关于next = [ (i,j) for i,j in getValidMoves(grid,x,y,moves)] 这一行正在创建一个列表,因为方括号,named next,因为变量名,包含元组,因为(i,j)的普通括号,函数输出的内容getValidMoves(grid,x,y,moves),其中应该是可迭代的(否则会出错)。现在,由于您在 for 循环中使用了两个变量,因此可迭代对象必须类似于 [[1,2],[7,8]],其中可迭代对象的每个 elemen6 都是具有 2 个元素的可迭代对象。

我希望您现在了解所有内容,如果没有在评论中说明我应该更好地解释什么。我将很快为我写的所有内容添加参考。


推荐阅读