迭代Python中的锯齿状数组值和索引

时间:2017-04-12 17:06:57

标签: python arrays list

让我们说arr是这样的jugged数组(如果你想要的话,列表列表):

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 

每个新行都以indices [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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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(..) iterable 作为输入,并生成包含索引(作为元组的第一项)和元素的元组。所以enumerate([1,'a',2,5.0]),它会生成元组(0,1)(1,'a')(2,2)(3,5.0)