2017-04-12 119 views
0
交錯數組值和指數

比方說,ARR是jugged陣列像這樣(名單列表中,如果你想):迭代通過在Python

arr = [[10], [12, 3], [33, 22, 2], [2], ...] 

無論是每行知的大小,也列出的數。

如何動態顯示獲取行大小的索引和值?如何迭代以打印該arr [2] [0] = 33例如?

首先嚐試:

for value in arr:               
     i = 0                 
     j = 0                 
     if isinstance(value, list):            
      for other in value:             
       print("a[%s][%s] = %s" % (i, j, other))       

       i += 1               
       j += 1 

每一個新行開始與指數[0] [0]。值12應爲[1] [0]

a[0][0] = 10 
a[0][0] = 12 
a[1][1] = 3 
... 

第二次嘗試。第一行是關閉的1值10應具有索引[0] [0]

i = 0                    
for value in arr1:                 
    i += 1                   
    for j in range(0, len(value)):            
     print("a[%s][%s] = %s" % (i, j, value[j])) 

結果:

a[1][0] = 10 
a[2][0] = 12 
a[2][1] = 3 

回答

5

使用enumerate

jagged = [[1], [2, 3], [4, 5, 6]] 

for i, sub_list in enumerate(jagged): 
    for j, value in enumerate(sub_list): 
     print 'a[{}][{}] = {}'.format(i, j, value) 


# a[0][0] = 1 
# a[1][0] = 2 
# a[1][1] = 3 
# a[2][0] = 4 
# a[2][1] = 5 
# a[2][2] = 6 
2

第一個代碼段失敗,因爲你在每一個外部循環復位i

for value in arr:               
     i = 0 # reset the counter? 
     j = 0                 
     if isinstance(value, list):            
      for other in value:             
       print("a[%s][%s] = %s" % (i, j, other))       

       i += 1 # increment in the inner loop? 
       j += 1

第二代碼片段失敗因爲你增量太早

i = 0                    
for value in arr1:                 
    i += 1 # increment *before* the inner loop? 
    for j in range(0, len(value)):            
     print("a[%s][%s] = %s" % (i, j, value[j]))

然而可以簡單地使用enumerate(..)和方便起見:

for i,value in enumerate(arr1): 
    for j,item in enumerate(value): 
     print("a[%s][%s] = %s" % (i, j, item))

enumerate(..)作爲輸入的迭代並生成包含該索引(作爲元組的第一項)和所述元件的元組。因此它生成元組(0,1),(1,'a'),(2,2)(3,5.0)

+0

是的,指數增量不適合這種情況 – Bor