2017-06-06 49 views
0

有沒有簡單的方法使用enumerate而不是for循環與​​?例如,在這裏,我循環將其子數組的索引替換爲子數組中每個元素的所有值。如何使用枚舉替換循環範圍(len)

list = [] 
for i in range(len(nparray)): 
    j = [i]*(len(nparray[i])) 
    list.append(j) 

我nparray是np.array與6級的子陣列,每個子陣列具有不同的大小。

回答

3

enumerate將不會取代使用for,只是說它更好。您可以使用,但是列表理解: [[i]*len(x) for i,x in enumerate(nparray)]

,並避免使用list變量名,因爲它alrteady用作內置。

+0

所以這裏我是從零開始的連續數字,x是nparray?爲什麼它知道我是從零開始的連續數字?感謝有關列表的評論。 – Jan

+1

這就是'枚舉'是如何工作和定義的:它遍歷所有元素(在這裏命名爲'x'),同時還提供它們的索引(在這裏命名爲'i')。 ('x'不是'nparray',而是跨越其元素。) – Julien

1

要使用枚舉器,首先需要聲明兩個目標變量,因爲枚舉器返回一個元組。使用

在理解列表您的例子,它可能是這樣的:

listR = [[idx]*(len(val)) for idx,val in enumerate(multiarray)] 

如果你想深https://docs.python.org/2/library/functions.html#enumerate

我希望這可以幫助您。

Regards