簡體   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