У меня есть эта строка в 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 — вспомогательная функция, но я думаю, что в ней нет необходимости разбираться в остальном коде.
Я более-менее понимаю как это работает, хотел в джаваскрипте понять как работает даже форс
помогло бы, если бы я подробно объяснил, не используя javascript? я не знаю джаваскрипт
да, помогло
ты понял мой ответ?
3 вещи, которые могут помочь вам преобразовать это в Javascript:
for...in
.for...in
будет цикл for...of. Цикл for...in
в JavaScript делает что-то другое. (Это JavaScript, поэтому for (var i = 0; ...; ++i) ...
тоже можно использовать.)for i, j in ...
в Python называется «распаковкой»; эквивалентно «Присвоение деструктуризации» в JavaScript.Цикл for-each в Javascript использует of
, а не in
. for
-in
Javascript делает что-то другое и почти всегда является неправильным инструментом для любой работы, в которой он используется.
Начнем с того, как работает цикл for в python:
В отличие от многих языков, python фактически берет каждый элемент, содержащийся в любом итерируемом объекте, который вы указываете в операторе цикла foor, и выполняет итерацию по этому объекту без какого-либо приращения. Итак, в 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. Однако понимание списка - это быстрый способ создания списков из итерируемых объектов, поскольку он использует эффективность функции добавления. В следующем примере с обычным многострочным циклом for вы используете добавление 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
Напротив, понимание списка не вызывает функцию добавления (или, по крайней мере, не так сильно. Я не уверен), поэтому итерация завершается быстрее.
О next = [ (i,j) for i,j in getValidMoves(grid,x,y,moves)]
Эта строка создает список из-за квадратных скобок с именем next
, из-за имени переменной, содержащей кортежи, из-за обычных скобок (i,j), из содержимого вывода функции getValidMoves(grid,x,y,moves)
, который должен быть итерируемым (иначе будет ошибка). Теперь, поскольку вы используете две переменные в цикле for, итерируемый должен быть чем-то вроде [[1,2],[7,8]], где каждый elemen6 итерируемого является итерируемым с 2 элементами.
Я надеюсь, что теперь вы все поняли, а если нет, скажите в комментариях, что мне лучше объяснить. Я скоро добавлю ссылки на все, что я написал.
вы хотите, чтобы кто-то объяснил, что делают эти строки, или вы хотите, чтобы кто-то перевел строки в javascript?