让我们说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
答案 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)
。