将变量的所有值(在循环中)保存在Python

时间:2017-06-29 18:31:15

标签: python arrays python-2.7 list

我有一个代码,我通知一个文件夹,其中有n个图像,代码应该返回相对频率直方图。

从那里我有一个函数调用:

for image in total_images:
    histogram(image)

image是代码正在处理的当前图像,total_images是以前通知的文件夹中的图像总数(n)。

从那里我调用histogram()函数,作为参数发送代码正在工作的当前图像。

我的histogram()函数的目的是返回每个图像的相对频率的直方图(rel_freq)。

虽然返回的值是正确的,但rel_freq应该是1x256的数组,范围从0到255.

如何将rel_freq变量转换为1x256数组?并且每个值都存储在相应的位置?

当我len *rel_freq)时,它会返回256,当我意识到它不是我需要的格式时......

同样,虽然返回的数据是正确的......

之后,我需要创建一个数组store_all = len(total_images)x256来保存所有rel_freq ...

我需要将所有rel_freq保存在一个数组中,以便稍后将其保存到外部文件,例如.txt。

我正在考虑创建另一个功能来执行此操作...

有类似的东西,但我不知道如何正确地做到这一点,但我相信你会明白逻辑......

def store_all_histograms(total_images):
    n = len(total_images)

    store_all = [n][256]

    for i in range(0,n):
        store_all[i] = rel_freq

我知道函数store_all_histograms()是错误的,我只是在这里写下来,或多或少地表明我想做的事......但是,我不知道如何正确地做到这一点......此时,我得到的错误是:

    store_all = [n][256]
IndexError: list index out of range

毕竟,我需要store_all变量来保存所有相对频率直方图,例如:

position:     0   ...  256 
store_all = [
            [..., ..., ...],
            [..., ..., ...],
            .
            .
            .
            n
            ]

现在请遵循以下代码块:

def histogram(path):
    global rel_freq

    #Part of the code that is not relevant to the question...

    rel_freq = [(float(item) / total_size) * 100 if item else 0 for item in abs_freq]

def store_all_histograms(total_images):
    n = len(total_images)

    store_all = [n][256]

    for i in range(0,n):
        store_all[i] = rel_freq

#Part of the code that is not relevant to the question...

# Call the functions
for fn in total_images:
    histogram(fn)

    store_all_histograms(total_images)

我希望我能够清楚地了解这个问题。

提前致谢,如果您需要任何其他信息,可以问我......

2 个答案:

答案 0 :(得分:2)

返回结果,不要使用全局变量:

def histogram(path):
    return [(float(item) / total_size) * 100 if item else 0 for item in abs_freq]

创建一个空列表:

store_all = []

并附加结果:

for fn in total_images:
    store_all.append(histogram(fn))

或者,使用列表理解:

store_all = [histogram(fn) for fn in total_images]

答案 1 :(得分:1)

for i in range(0,n):
    store_all[i+1] = rel_freq

也许尝试一下?如果我是诚实的,我对这个问题有点困惑。您是否试图将所有项目调用数组的方式改为1,以便不是通过列表[0]调用位置1而是通过列表[1]调用它?

所以你希望它这样做?

>>list = [0,1,2,3,4]
>>list[1]
0