繁体   English   中英

Python循环:idx用于idx(重写为javascript)

[英]Python loop : idx for idx (rewrite to javascript)

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

我不知道如何重写这一部分:

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

idx用于val的idx :将idx放在开头是什么意思?

“ idx”通常是索引的缩写

Python循环允许像这样直接访问嵌套列表中的项目:

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

1 2
3 4
5 6

在Python中使用枚举可实现以下类似功能:

>>> 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);
        };
    };
};

假设您有一个可迭代对象,并且想要对其进行迭代,并且只需要其项目的值即可 您可以使用普通的列表理解:

[x for x in it]

但是,如果您需要项的值和索引 ,则可能要使用带有可迭代的enumerate 在这种情况下,它将如下所示:

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

在这里,在for关键字的左侧,您可以任意顺序使用ixval或两者。 但是在右侧, val始终应遵循ix

您的代码:

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)

我认为现在很容易隐瞒它。 可能如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM