如何遍历列表的名称
how to iterate through names of lists
我有多个列表(bit0、bit1、bit2 等),我想像这样循环访问它们:
for i in range(3):
view_image(bit1[i])
view_image(bit2[i])
view_image(bit3[i])
view_image(bit4[i])
view_image(bit5[i])
如何通过在循环内构造其参数名称来避免重复 view_image 语句?
像这样:view_image('bit' + str(i+1)[i])
这些列表将图像集合表示为 numpy 数组。例如,bit1[0] 是 bit1 集合中的第一个图像。
我愿意
arrays = (bit1, bit2, bit3, bit4, bit5)
for i in range(3):
for arr in arrays:
view_image(arr[i])
由于您正在存储多个不同分辨率的图像,并且有一个可能由运行时确定的数字,您可以求助于以下方法:
要创建列表,您可以:
resolutions = ('low', 'medium', 'high', 'hq')
images = {} # empty dict
for res in resolutions:
if pic_present(res):
images[res] = get_image(res)
# Now you can proceed as above:
for i in range(3):
for res, img in images.iteritems():
announce(res, i) # sth. like print "Showing component", i, "of image", res
view_image(img[i])
如果图像数量总是相同的,可以使用列表:
images = [] # empty list
for index, res in enumerate(resolutions):
images[index] = get_image(res)
# Now you can proceed as above:
for i in range(3):
for index, img in enumerate(images):
announce(resolutions[index], i) # sth. like print "Showing component", i, "of image", res
view_image(img[i])
同样的事情有点不同,如果你有256级分辨率,未命名。在这种情况下,您只需替换
resolutions = ('low', 'medium', 'high', 'hq')
和
resolutions = range(256) # gives you the numbers of 0 to 255 to iterate over
然后按上述步骤进行。无需为 256 个不同的变量名而烦恼,但数据会整齐地放入字典或列表中,仅此而已。
如果可以的话,一开始设置为
bit = [[],[],[],[],[]]
并建立比特的每一部分。然后你可以循环 as
for i in xrange(3):
for bitarray in bit:
view_image(bitarray)
如果它们真的不能放入您可以枚举的列表列表中,那么 glglgl 建议的看起来最好。
这是我一直在寻找的答案(感谢 tmrlvi):
for i in range(3):
for k in range(16):
view_image(locals()['bit'+str(k+1)][i])
我看了这个博客 post:
http://stupidpythonideas.blogspot.de/2013/05/why-you-dont-want-to-dynamically-create.html
但我仍然不明白为什么这段代码对我来说不是个好主意。
如果你能解释一下哪里出了问题,我将不胜感激!
我有多个列表(bit0、bit1、bit2 等),我想像这样循环访问它们:
for i in range(3):
view_image(bit1[i])
view_image(bit2[i])
view_image(bit3[i])
view_image(bit4[i])
view_image(bit5[i])
如何通过在循环内构造其参数名称来避免重复 view_image 语句?
像这样:view_image('bit' + str(i+1)[i])
这些列表将图像集合表示为 numpy 数组。例如,bit1[0] 是 bit1 集合中的第一个图像。
我愿意
arrays = (bit1, bit2, bit3, bit4, bit5)
for i in range(3):
for arr in arrays:
view_image(arr[i])
由于您正在存储多个不同分辨率的图像,并且有一个可能由运行时确定的数字,您可以求助于以下方法:
要创建列表,您可以:
resolutions = ('low', 'medium', 'high', 'hq')
images = {} # empty dict
for res in resolutions:
if pic_present(res):
images[res] = get_image(res)
# Now you can proceed as above:
for i in range(3):
for res, img in images.iteritems():
announce(res, i) # sth. like print "Showing component", i, "of image", res
view_image(img[i])
如果图像数量总是相同的,可以使用列表:
images = [] # empty list
for index, res in enumerate(resolutions):
images[index] = get_image(res)
# Now you can proceed as above:
for i in range(3):
for index, img in enumerate(images):
announce(resolutions[index], i) # sth. like print "Showing component", i, "of image", res
view_image(img[i])
同样的事情有点不同,如果你有256级分辨率,未命名。在这种情况下,您只需替换
resolutions = ('low', 'medium', 'high', 'hq')
和
resolutions = range(256) # gives you the numbers of 0 to 255 to iterate over
然后按上述步骤进行。无需为 256 个不同的变量名而烦恼,但数据会整齐地放入字典或列表中,仅此而已。
如果可以的话,一开始设置为
bit = [[],[],[],[],[]]
并建立比特的每一部分。然后你可以循环 as
for i in xrange(3):
for bitarray in bit:
view_image(bitarray)
如果它们真的不能放入您可以枚举的列表列表中,那么 glglgl 建议的看起来最好。
这是我一直在寻找的答案(感谢 tmrlvi):
for i in range(3):
for k in range(16):
view_image(locals()['bit'+str(k+1)][i])
我看了这个博客 post: http://stupidpythonideas.blogspot.de/2013/05/why-you-dont-want-to-dynamically-create.html 但我仍然不明白为什么这段代码对我来说不是个好主意。 如果你能解释一下哪里出了问题,我将不胜感激!