#python #python-3.x #list #for-loop #jupyter-notebook
#python #python-3.x #Список #for-цикл #jupyter-notebook
Вопрос:
У меня есть список, который содержит внутренний список (считанный из файла, разделенного запятой), из которого я хотел бы получить второй элемент. Например, в x = [[2,3,4][5,6,7]]
я хотел бы получить 3 и 6. Простые вещи, которые, как я думал, я знал, как это сделать. Я знаю, что мог бы попробовать использовать следующий метод для получения вторых чисел:
fp = open('random.txt')
x = list(fp.read().split("n"))
x.pop(0) #header line
x = [item.split(",") for item in x]
print([item[1] for item in x])
Моя проблема в том, что я могу получить первый элемент, выполнив item[0]
приведенный выше код, и это работает нормально. Однако, если я попытаюсь item[1]
, я получу ошибку list index out of range. Я попытался просто проверить, был ли мой список правильным в обычном цикле for.
for item in x:
print(item[1])
В итоге это сработало нормально, теперь я знаю, что могу просто использовать эту вторую версию, если я действительно хочу, но мне было интересно, почему первая версия выдает эту ошибку, когда она отлично работает во второй версии?
РЕДАКТИРОВАТЬ: включил остальную часть моего кода
Комментарии:
1. Ваше понимание списка в порядке.. не уверен, почему вы получаете сообщение об ошибке. Убедитесь, что во всех подсписках есть как минимум 2 элемента и что вы правильно разделяете список
2. Ваше редактирование сделало ваш вопрос совершенно другим. Вероятно, у вас есть строки, которые не содержат запятой. Мы не можем сказать больше без примеров данных, которые показали бы проблему.
3. n после последней строки данных — строки после этого нет
,
, поэтому и [1] тоже нет…4.
print([item[1] for item in x if len(x) > 1] )
исправляет5. Не удается воспроизвести. Я заметил, что у вас запутанные имена переменных и вы перезаписываете их разными структурами. Возможно, ошибка произошла до / после того, как вы изменили одну из переменных без четкого имени, а не там, где вы представили ее в этом вопросе.
Ответ №1:
Я думаю, что проблема, должно быть, как-то связана с вашим другим кодом. Я только что выполнил следующее:
x = [[2, 3, 4], [5, 6, 7]]
print([item[1] for item in x])
[3,6]
for item in x:
print(item)
[2, 3, 4]
[5, 6, 7]
for item in x:
print(item[1])
3
6
Весь опубликованный вами код работает нормально, без ошибок. Вы, должно быть, каким-то образом изменяете свой список, который не опубликован. Я предлагаю вам попробовать print(x)
перед его обработкой определить, как выглядит фактическая структура, а затем соответствующим образом обработать ее оттуда.