Python循环:idx的idx(重写为javascript)

时间:2018-05-11 10:53:29

标签: javascript python

我正在尝试将一些Python代码重写为Javascript。

我无法弄清楚如何重写这部分:

zone_indices = [[idx for idx, val in enumerate(classified) if zone + 1 == val] for zone in range(maxz)]

idx for idx,val :将 idx 置于开头是什么意思?

3 个答案:

答案 0 :(得分:2)

“idx”通常是索引的缩写。

Python循环允许直接访问嵌套列表中的项目,如下所示:

>>> lst = [[1, 2], [3, 4], [5, 6]]
>>> 
>>> for a,b in lst:
        print a,b

1 2
3 4
5 6

在Python中使用enumerate允许类似的东西:

>>> for idx,val in enumerate(['a','b','c']):
        print('index of ' + val + ': ' + str(idx))

index of a: 0
index of b: 1
index of c: 2

JavaScript中的enumerate(array)相当于array.entries(),可以像Python一样使用:

zone_indices = []

for (let i = 0; i < maxz.length, i++) {
    for (let [idx, val] of classified.entries()) {
        if (zone+1 === val) {
            zone_indices.push(idx);
        };
    };
};

答案 1 :(得分:1)

假设你有一个可迭代的,你想迭代它,你只需要的项目。你可以使用普通的列表理解:

[x for x in it]

但是如果您需要项目的值和索引,您可能希望将enumerate与iterable一起使用。在这种情况下,它看起来像这样:

[(ix, val) for ix, val in it]

此处,在for关键字的左侧,您可以按任意顺序选择ixval或两者。但在右侧val始终应该遵循ix

答案 2 :(得分:1)

您的代码:

zone_indices = [[idx for idx, val in enumerate(classified) if zone + 1 == val] for zone in range(maxz)]

相当于:

zone_indices = []

for zone in range(maxz):
    for idx, val in enumerate(classified):
         if zone + 1 == val:
            zone_indices.append(idx)

我认为现在转向JS很容易。它可能如下所示:

zone_indices = []
for(let zone=0; zone< maxz ; zone++){
    for(idx in classified){
        if (zone + 1 === classified[idx]){
            zone_indices.push(idx)
        }
    } 
}