Как пройти через установку различных переменных для вывода функции? - PullRequest
0 голосов
/ 16 мая 2018

Так что если у меня как показано:

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 голосов
/ 16 мая 2018

Причина, по которой вы получаете ошибку, состоит в том, что вы пытаетесь присвоить спискам значение индекса, а не назначаете им местоположение в списке.

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

выход

IndexError: list assignment index out of range

Это не работает, потому что в списке еще не определено 0-е место. если вы сделали:

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

выход: * +1010 *

['Mary']

Затем вы можете присвоить значение 0-му месту в списке, поскольку оно существует.

Это работает, если это то, что вы ищете:

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

Выход:

 [None, None, None, 'Mary', None, None, None, None, None, None]
0 голосов
/ 16 мая 2018

Вы можете использовать map / список понимания / выражение генератора и 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('.'))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...