所以,如果我有如下所示:
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
我不知道最简单的方法是什么,我相信很多人都在这里,所以我感谢所有的帮助! 感谢
答案 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('.'))))