如何循环设置不同的变量到函数的输出?

时间:2018-05-16 00:10:05

标签: python list pandas tensorflow

所以,如果我有如下所示:

x_train = []
y_train = []
x_test = []
y_test = []

for filename in os.listdir('/directory'):
    x_train[os.listdir('/directory').index(filename)], y_train[os.listdir('/directory').index(filename)], x_test[os.listdir('/directory').index(filename)], y_test[os.listdir('/directory').index(filename)] = lstm.format_data(new, seq_len, True)

函数format_data()将为每个y_train,x_train等提供多个索引,并且我想在训练模型时再次循环这些项目。我正在使用它作为编写大量内容的捷径:

x_train#, y_train#, x_test#, y_test# = lstm.format_data(.....)

以下是我收到的错误消息。

IndexError: list assignment index out of range

我不知道最简单的方法是什么,我相信很多人都在这里,所以我感谢所有的帮助! 感谢

2 个答案:

答案 0 :(得分:2)

您收到错误的原因是您尝试为列表提供索引值,而不是在列表中为其指定位置。

math2 = {
    cos = function(angle)
        vectors = {1,0,-1,0}
        return vectors[(angle/90)+1]
    end,

    sin = function(angle)
        vectors = {0,1,0,-1}
        return vectors[(angle/90)+1]
    end
}

输出

x_train = []
x_train[0] = 'BOB'

它不起作用,因为列表没有定义第0个点。如果你这样做:

IndexError: list assignment index out of range

输出:

x_train = []
x_train.append('BOB')
x_train[0] = 'Mary'
print(x_train)

然后你可以为列表中的第0个点分配一个值,因为它存在。

如果你正在寻找的话,这是有效的:

['Mary']

输出:

x_train = [None] * 10
x_train[3] = 'Mary'
print(x_train)

答案 1 :(得分:1)

您可以使用map / list comprehension / generator表达式和zip

>>> import os
>>> import random
>>> 
# some nonsense function for the sake of example
>>> def format_data(filename):
...     return [random.choice(filename) for _ in range(4)]
... 
>>> 
>>> x_train, y_train, x_test, y_test = zip(*map(format_data, os.listdir('.')))

这会创建四个元组。如果重要的是它们是列表,我们必须转换。

>>> x_train, y_train, x_test, y_test = map(list, zip(*map(format_data, os.listdir('.'))))

等效理解/生成器表达式:

>>> x_train, y_train, x_test, y_test = zip(*(format_data(fn) for fn in os.listdir('.')))
>>> x_train, y_train, x_test, y_test = (list(x) for x in zip(*(format_data(fn) for fn in os.listdir('.'))))