如何遍历列表名称

时间:2015-01-02 23:15:14

标签: python list function arguments

我有多个列表(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集合中的第一个图像。

3 个答案:

答案 0 :(得分:4)

我会这样做

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个不同的变量名称,但是数据被整齐地放入字典或列表中就是这样。

答案 1 :(得分:1)

如果可能,在开始时将其设置为

bit = [[],[],[],[],[]]

并建立比特的每个部分。然后你可以循环播放

for i in xrange(3):
    for bitarray in bit:
        view_image(bitarray)

如果它们真的无法列入您可以枚举的列表列表中,那么glglgl建议看起来最好。

答案 2 :(得分:-2)

这是我正在寻找的答案(感谢tmrlvi):

for i in range(3):
    for k in range(16):
        view_image(locals()['bit'+str(k+1)][i])  

我查看了这篇博文: http://stupidpythonideas.blogspot.de/2013/05/why-you-dont-want-to-dynamically-create.html 但我仍然不明白为什么这个代码在我的情况下会是一个坏主意。 如果你能解释什么可能出错,我将不胜感激!