![](/img/trans.png)
[英]React / Javascript for loop - Start from idx 0 when exceeding array length
[英]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
關鍵字的左側,您可以任意順序使用ix
, val
或兩者。 但是在右側, 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.