Проблема с зацикливанием двух циклов for одновременно в python

Я хочу выполнить два цикла for одновременно в python, чтобы одновременно читать две строки с одинаковым индексом в двух разных файлах.

Это то, что я пробовал:

def load_dataset(train_path: str, label_path: str) -> Tuple[List[str], List[str]]:
   words = []
   labels = []
   with open(train_path, encoding='utf8') as tp, open(label_path, encoding='utf8') as lp:
       for line_tp in tp, line_lp in lp:
           line_tp = line_tp.strip()
           line_lp = line_lp.strip()
           if line_tp and line_lp:
               word = line_tp
               label = line_lp 
               words.append(word)
               labels.append(label)
   return words, labels

Но когда я попытался вызвать функцию

(train_list, label_list) = load_dataset(train_path, label_path)

Я получил:

UnboundLocalError: local variable 'line_lp' referenced before assignment

Теперь я действительно думаю, что проблема в том, что первый цикл for выполняется перед вторым циклом, есть ли способ выполнить их одновременно с одним и тем же индексом?

python использует zip для «одновременного повторения двух (или более) вещей».

Paritosh Singh 07.04.2019 13:27

Возможный дубликат Как перебирать строки в двух файлах одновременно?

Paritosh Singh 07.04.2019 13:28

@ParitoshSingh спасибо, я не видел этого ответа, я попробую

mao95 07.04.2019 13:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
809
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Если вы хотите перебирать итераторы в одном цикле, вы должны использовать zip()

for line_tp, line_lp in zip(tp, lp):

Вы можете использовать zip для получения строк из обоих файлов:

for line_tp,, line_lp in zip(tp, lp):
    ....

Здесь вообще нет двух циклов for. Как вы должны понять из трассировки ошибок, ошибка будет происходить в самом операторе for; потому что это совсем не то, как вы перебираете два отдельных списка.

Довольно сложно сказать, что вы пытаетесь сделать, но я подозреваю, что вы имели в виду это:

for line_tp, line_lp in zip(tp, lp):

Другие вопросы по теме