迭代通过在Python
问题描述:
交错数组值和指数
比方说,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
答
使用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
答
的第一个代码段失败,因为你在每一个外部循环复位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)
。
是的,指数增量不适合这种情况 – Bor